佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 一些關(guān)于asp 購(gòu)物車的想法

一些關(guān)于asp 購(gòu)物車的想法

熱門標(biāo)簽:Mysql連接數(shù)設(shè)置 電子圍欄 銀行業(yè)務(wù) 服務(wù)器配置 Linux服務(wù)器 團(tuán)購(gòu)網(wǎng)站 科大訊飛語(yǔ)音識(shí)別系統(tǒng) 阿里云
問題: 1.購(gòu)物車中的數(shù)據(jù)是否應(yīng)該存儲(chǔ)在數(shù)據(jù)庫(kù)中?
我特別想知道在真正的項(xiàng)目中,那些真正的軟件工程師是如何考慮這個(gè)問題的。在Google上一搜,搜到了一篇咱園子里一位網(wǎng)友的觀點(diǎn):購(gòu)物車應(yīng)該是個(gè)臨時(shí)存儲(chǔ)數(shù)據(jù)的模塊,他將其存放在Session對(duì)象中。這位網(wǎng)友說的很有道理,不過我并不喜歡這樣的做法。如果大家都將其存儲(chǔ)在Session對(duì)象中,成千上萬(wàn)個(gè)用戶一同購(gòu)物的話,想必ASP.NET服務(wù)器必將承受巨大的負(fù)載。也許像我們國(guó)內(nèi)的網(wǎng)站可能會(huì)好一些,但想Amazon這樣的網(wǎng)站,怎么做的呢?Amazon中國(guó)網(wǎng)站,也就是Joyo的網(wǎng)站,并不是將其存儲(chǔ)在Session對(duì)象中,因?yàn)槲胰绻@次放入購(gòu)物車中的商品沒有提交訂單,下次登錄后購(gòu)物車中還會(huì)有這些商品。因此,我想他們可能是將這些購(gòu)物車中的數(shù)據(jù)放入了數(shù)據(jù)庫(kù)中。
回復(fù): 把購(gòu)物車存放在Session中,這種做法似乎只存在于大學(xué)里的課程設(shè)計(jì)或者一些無(wú)人在意的實(shí)習(xí)項(xiàng)目中出現(xiàn)。事實(shí)上,基本所有的電子商務(wù)網(wǎng)站都把購(gòu)物車數(shù)據(jù)存放到了數(shù)據(jù)庫(kù)里。下面是一些解釋和設(shè)計(jì)上需要注意的地方:
1、Session并不適合做大數(shù)據(jù)量的數(shù)據(jù)存放,當(dāng)用戶比較多的時(shí)候勢(shì)必影響服務(wù)器性能,這是應(yīng)該避免的。
2、Session存在意外丟失的問題,或者當(dāng)用戶不小心關(guān)閉瀏覽器,都會(huì)引起購(gòu)物車內(nèi)物品全部丟失,用戶體驗(yàn)很不好
3、Cookies可以解決上面一條里Session的問題,但是Cookies的長(zhǎng)度限制,以及使用Cookies時(shí)的通訊開銷,還有安全性方面考慮,Cookies并不適合做購(gòu)物車
4、比較好的用戶體驗(yàn)是,無(wú)論用戶登錄與否,都可以在一定時(shí)間內(nèi)記錄購(gòu)物車狀態(tài),這就要求數(shù)據(jù)庫(kù)內(nèi)購(gòu)物車不能與用戶捆綁太死
5、放到購(gòu)物車?yán)锏纳唐?,一般都是有?gòu)買意向的商品,但并不一定會(huì)成為真實(shí)的訂單,這時(shí)候,保留這份數(shù)據(jù),對(duì)數(shù)據(jù)挖掘、業(yè)務(wù)分析有至關(guān)重要的作用
問題: 2.關(guān)于并發(fā)?
原來(lái)我在開發(fā)自己的模擬網(wǎng)站的時(shí)候,曾經(jīng)想到這樣一個(gè)問題:如果一個(gè)客戶在網(wǎng)站將一些圖書放入了購(gòu)物車,那么這些數(shù)量的圖書是否應(yīng)該從庫(kù)存中減去呢?當(dāng)時(shí)我是這樣做了。我將購(gòu)物車中相應(yīng)圖書的數(shù)量從數(shù)據(jù)庫(kù)中減去,以防止此時(shí)其他用戶看到”虛”的庫(kù)存數(shù)量(如果沒有減去,那么其他用戶是可以購(gòu)買的。例如:庫(kù)存中圖書的數(shù)量是10本,客戶A將10本放入自己的購(gòu)物車,此時(shí)客戶B也將10本放入自己的購(gòu)物車,那么誰(shuí)將購(gòu)買到此書將成為一個(gè)矛盾)。不過我這樣做的結(jié)果是,每當(dāng)客戶更新購(gòu)物車的同時(shí)就會(huì)同數(shù)據(jù)庫(kù)有一次交流,加大了數(shù)據(jù)服務(wù)器的負(fù)擔(dān)。Amazon.cn在這方面做的也不是很好,前些日子相信大家可能都遇到了當(dāng)購(gòu)買《深入理解操作系統(tǒng)》一書的時(shí)候,本來(lái)生成了訂單,但是卻在第二天告知缺貨的事情。這一事件確實(shí)非常影響Amazon.cn的信譽(yù),不知道現(xiàn)在他們的系統(tǒng)是否已經(jīng)解決這一問題,不過現(xiàn)在《深入理解操作系統(tǒng)》一書的Joyo價(jià)已經(jīng)今非昔比了。不知道各位高手是如何解決這一問題的,歡迎大家將自己的成功經(jīng)驗(yàn)寫在評(píng)論中。
回復(fù): 首先說一下數(shù)據(jù)庫(kù)服務(wù)器的負(fù)擔(dān),想一下每訪問一個(gè)頁(yè)面要對(duì)數(shù)據(jù)庫(kù)進(jìn)行多少次訪問,然后想一下多次訪問才能換來(lái)一次放購(gòu)物車的操作(訪問次數(shù)主要取決于網(wǎng)站易用性的設(shè)計(jì),這是另外一個(gè)話題),所以,雖然在這里修改設(shè)計(jì)可以減輕一些數(shù)據(jù)庫(kù)壓力,但是這里并不是瓶頸,丁學(xué)認(rèn)為不需要在這里太在意。
目前比較通用的做法,購(gòu)物車的商品是不會(huì)立即扣減庫(kù)存的,主要是為了防止有人通過購(gòu)物車惡意占用商品,另外一般都會(huì)給一個(gè)冗余量,因?yàn)榇蟛糠仲?gòu)物車?yán)锏纳唐凡粫?huì)進(jìn)入最終的成功訂單,不可以讓購(gòu)物車影響銷量,這是必須做到的。庫(kù)存一般在訂單成功提交的時(shí)候扣減庫(kù)存,也就是用戶在提交訂單時(shí),你還有一次機(jī)會(huì)提示用戶沒有庫(kù)存了,所以更沒有必須在放到購(gòu)物車時(shí)就扣減庫(kù)存。對(duì)于“成功訂單”,并不是所有用戶提交的訂單都算成功訂單,這里有一個(gè)自動(dòng)審單的過程,這個(gè)程序不好寫,但確實(shí)很重要,根據(jù)以前的數(shù)據(jù)分析、用戶行為、用戶信譽(yù)等經(jīng)驗(yàn)性的數(shù)據(jù)來(lái)由系統(tǒng)在幾分鐘內(nèi)自動(dòng)對(duì)訂單完成一次審核,審核力度與行業(yè)有關(guān),這樣可以杜絕大部分的假訂單,其中一部分可能還要由自動(dòng)審單系統(tǒng)轉(zhuǎn)交人工審核。
這里有一個(gè)特殊情況,有一些特殊商品比如演唱會(huì)門票,可能會(huì)存在在線選座的行為,這種時(shí)候放購(gòu)物車后留座變得比較有用,現(xiàn)在的做法一般是放購(gòu)物車后立即留座,但某一段時(shí)間未成為真實(shí)訂單的話就自動(dòng)釋放,比如十分鐘,雖然無(wú)法完全杜絕惡意占座,不過可以解決多數(shù)問題?,F(xiàn)在票務(wù)方面的成功訂單和大部分其他行業(yè)不太一樣,票務(wù)行業(yè)的在線選座成功訂單的判斷標(biāo)準(zhǔn)為是否已經(jīng)成功支付,就是說除非你給錢了,不然只能給你留十分鐘。
問題: 3.訂單和訂單明細(xì)同購(gòu)物車的關(guān)系
我想這個(gè)問題可能一直是此類網(wǎng)站的一個(gè)大問題吧!前兩天,CSTP的陳老師還曾在電話中面試我這道題,我當(dāng)時(shí)很緊張,問題答的不是很清楚。其實(shí)這個(gè)問題簡(jiǎn)單的想并不難:兩個(gè)表訂單和明細(xì),訂單表中每列指向明細(xì)表中的對(duì)應(yīng)列。外鍵就是訂單表中的訂單號(hào)。
回復(fù): 這個(gè)問題比較簡(jiǎn)單,一種是放購(gòu)物車?yán)锞彤?dāng)是訂單了,拿一個(gè)狀態(tài)標(biāo)識(shí)一下,這種狀態(tài)下訂單是可修改的,購(gòu)物車合并進(jìn)訂單系統(tǒng)(注意處理用戶登錄與非登錄狀態(tài));第二種是有單獨(dú)的購(gòu)物車表,當(dāng)最終提交訂單時(shí),復(fù)制購(gòu)物車內(nèi)的信息進(jìn)訂單和訂單明細(xì)表。后一種用得比較多一些,具體選擇哪個(gè)取決于行業(yè)和商品屬性。
問題: 4.明細(xì)表中訂單號(hào)的生成?
這個(gè)問題繼承第3個(gè)問題,我一直不知道應(yīng)該如何解決此問題。我有兩個(gè)解決方案,一個(gè)是使用觸發(fā)器,另一個(gè)是編程。前者在客戶每次放入購(gòu)物車中一種商品的同時(shí)增加一個(gè)明細(xì),確認(rèn)購(gòu)買后生成訂單,將明細(xì)表中的購(gòu)買狀態(tài)更改以觸發(fā)觸發(fā)器將生成一個(gè)訂單號(hào)(當(dāng)然這個(gè)訂單號(hào)既可以在觸發(fā)器中編程也可以是讓訂單表訂單號(hào)的一列設(shè)置為自動(dòng)生成序號(hào))。后者將判斷訂單號(hào),然后將其加1以生成新的訂單號(hào)。但是這兩個(gè)方案我總是覺得非常不好,很想知道在商用網(wǎng)站中訂單號(hào)是如何處理的。
回復(fù): 首先我個(gè)人認(rèn)為觸發(fā)器的方案不可取,理由不多說,不然又是一大坨。這里也有兩種做法,一種是訂單表自動(dòng)生成編號(hào),生成訂單時(shí),先寫入訂單表,然后取回訂單號(hào)再更新訂單明細(xì)表;另一種是按業(yè)務(wù)規(guī)則生成訂單號(hào),當(dāng)訂單號(hào)已知后隨便先生成訂單記錄還是明細(xì)記錄都可以,但是要保證明細(xì)記錄最終一定有訂單記錄,不然會(huì)有很多詭異的明細(xì)項(xiàng)。后一種辦法又有兩種做法,一是訂單號(hào)由數(shù)據(jù)庫(kù)生成,一般采用臨時(shí)表,好處是可以全業(yè)務(wù)通用流水號(hào),另一種是訂單號(hào)由程序生成,程序生成時(shí)可以使用GUID,但更好的辦法是使用訂單時(shí)間加標(biāo)識(shí)值,時(shí)間部分可以根據(jù)訂單量來(lái)確定粒度大小,標(biāo)識(shí)部分采用有序編號(hào),時(shí)間粒度還要考慮防止別人大概統(tǒng)計(jì)你的業(yè)務(wù)量(汗~~~這個(gè)也是另外的問題,很多做法,看情況了,改天有空再寫個(gè)有關(guān)訂單號(hào)生成的文章吧,先回復(fù)這么多,大概信息也夠了……)

標(biāo)簽:大理 萍鄉(xiāng) 棗莊 江蘇 廣元 衡水 衢州 蚌埠

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一些關(guān)于asp 購(gòu)物車的想法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    吴忠市| 两当县| 南澳县| 拉孜县| 体育| 隆子县| 安宁市| 广元市| 枣阳市| 巨鹿县| 固始县| 黑河市| 绍兴县| 德阳市| 吐鲁番市| 驻马店市| 稻城县| 永平县| 石柱| 宁海县| 泰顺县| 舒城县| 洞头县| 新干县| 武川县| 涿州市| 建平县| 乳源| 玉林市| 龙泉市| 伊宁县| 聊城市| 固镇县| 阳城县| 纳雍县| 和龙市| 仁寿县| 两当县| 新竹县| 邮箱| 达拉特旗|