2011-10-20 37 views
2

我們想要設計一個電子商務應用程序,我們關於consitent股票數字的精神。我們不希望我們的顧客在購買物品後發現該物品缺貨,這是件大事。這裏的平均訂單有大約60個不同的項目,這將使事情更加棘手。有沒有庫存管理設計模式?

讓我們想象一下這兩個場景:

1號方案:

1)客戶C1打開網上商店,並找到他/她想要購買的產品;

2)該產品顯示爲「庫存」(但當前庫存爲1);

3)顧客C1將1件物品放入購物籃; 4)客戶C2進入網站並選擇相同的商品(放入購物籃),該商品仍被標爲「庫存」(庫存仍爲1);

5)客戶C1去結帳並確認他的購買,並且應用程序將該項目的當前庫存減少到0; 6)客戶C2持續購買物品,比如說35個其他不同的物品(花費20分鐘到客戶c2選擇他想要的物品); 7)客戶C2去結帳並確認這一購買,但是現在,他購買的第一件商品已不再可用(我們不能銷售它)。

8)應用程序警告客戶C2第一件物品不再可用,並且他必須檢查他的購物籃;

9)客戶C2生氣並關閉瀏覽器而不購買任何東西。

第二方案(但我認爲這是不必要的複雜性和越野車):

1)客戶C1打開網上商店,並找到他/她想要購買的產品;

2)該產品顯示爲「庫存」(但當前庫存爲1);

3)客戶C1在籃子中放入1個物品(並且應用程序將該物品的當前庫存減少到0);

4)客戶C2進入網站,看到他/她想要的物品缺貨;

5)客戶C2離開網站;

6)客戶C1持續購買物品(這些物品的庫存減少);

7)客戶C1關閉瀏覽器;

8)每隔一段時間,一些批處理程序開始移除已減少庫存但未被購買/確認的物品。

我們只有幾個不同的產品,但我們一直賣30,000左右。000件商品通過電話銷售,有些產品每天的銷售量高達2.000.000,因此負責該產品庫存的行中的併發可能會同時獲得許多更新,因此重要的是我們獲得良好的性能。

這些都是平常的場景,但有這給用戶帶來更好的體驗,同時保持股票數量一致,但產生巨大的應用性能的任何設計模式?

任何幫助將不勝感激。

乾杯

+0

我會添加一個標籤「數據庫」,典型的設計模式是關於(面向對象的)代碼,而不是數據。 –

+0

感謝您的提示,我剛剛完成了!乾杯 – jfbaro

回答

1

你可以嘗試找出其他在線零售商如何做,並模仿它們。例如,當亞馬遜幾乎沒有產品時,他們會經常顯示一條通知:「只有n剩餘庫存!」嘗試找到這樣的產品,然後在一個瀏覽器中將其添加到您的購物車,並使用不同的瀏覽器來查看清單所發生的情況。

+0

是的,我爲這一個。最讓我惱火的情景是事先被告知庫存水平極低,並且(在結帳時)他們可能無法完成一件物品。共同的禮貌和誠實將贏得我。 – khany

2

您的第一種情況是大多數公司所做的,這就是爲什麼庫存管理系統具有回購訂單的原因。

你的第二個方案是客戶更有利,反而會降低你的銷售一定程度上,以及更復雜的管理。

這真的不是數據庫決定。這是您如何處理廣告資源的管理決策。

大多數支持足夠硬件的關係數據庫每天可以處理200萬次更改。

+0

感謝您的提示:) – jfbaro

+0

感謝您的提示:)。我同意你的看法,我只是想知道是否有傳統的答案(第一個是最常用的答案)。請記住,我們可以將2.000.000條更新放入同一行(與銷售相同的產品)。但是,是的,這僅僅是一種產品每秒24次更新。在「高峯時間」,我們可以爲單個產品獲得多達300個更新。但績效只是我們面臨的問題之一,一致性和用戶體驗是正確的重點。再次感謝您花時間幫助我!歡呼 – jfbaro

+0

@ user1005234:好吧,假設您每天有2000萬次更新。有了足夠的服務器通道數據,這仍然不會成爲問題。但是,這是一個更適合http://dba.stackexchange.com/的問題。 –

2

首先,退後一步,您是否真的需要解決前端的庫存管理問題?由於您銷售的是大批量相對較少的產品,管理您的庫存應該相對容易,因此您永遠不會缺貨,或者,如果是的話,它不會阻止您完成訂單。關於計算安全庫存的文獻和例子有很多,只需要一些統計數據。將我的注意力集中在讓公司提供工具(如果它們還沒有)來管理他們的庫存以防止缺貨情況而不是試圖阻止他們在銷售門戶中發生。

這就是說,我不太確定我是否按照您提出的兩個方案來解決問題。即使數據庫性能完美無瑕,如果您的庫存A中只有1件商品,並且如果庫存中沒有庫存,則無法銷售商品,那麼按照定義,兩個客戶中的一個(根據定義)是兩個潛在客戶之一失去。如果在第一種情況下,如果他的35件物品中沒有任何物品沒有庫存(如果他花20分鐘時間裝滿他的手推車似乎不太可能),則C2不會購買任何東西,但是您無法在數據庫中做任何事情來阻止。你的界面可能會有一些AJAX,當他們購物時,他們提醒他們購物車中的某件商品缺貨,就像StackExchange在通過其他人輸入答案時發出的通知一樣。我一點也不清楚,早些告訴C2這個問題會有好處 - 如果他在一次交易中無法購買全部35件物品時要離開,那麼無論何時告訴他,他都會離開C1買了這個物品。實際上,沒有辦法設計這個系統,以免在這種情況下讓兩個客戶中的一個失望。

它可以幫助如果你能解釋一點,爲什麼你的應用程序和您的客戶都斷貨問題如此敏感。大多數客戶和大多數零售商相對習慣於這樣的事實:有時在下訂單後,他們得到通知,零售商無法按預期完成訂單,並且可以選擇取消該部分他們的訂單,整個訂單(假設其餘的商品還沒有發貨),或等待物品重新回到庫存。假設您在瀏覽時通知客戶庫存相對較低(即,如果您正在查看僅剩少量庫存的物料,亞馬遜會告訴您「庫存N件物品」),大多數客戶在進行結賬時都會合理地理解20分鐘,並且被告知該物品現在缺貨,因爲他們事先知道他們需要快速訂購。而且大多數零售商都感到很舒服,即使他們缺貨最受歡迎的商品,他們仍然可以滿足更多的需求,因爲他們無疑有新的庫存在第二天或第二天抵達,或者他們可以趕緊下單新的庫存。

0

我與賈斯汀和吉爾伯特。這與物流相比更多的是前端。還有亞馬遜的解決方案是「我希望所有這些東西都放在同一個包中」(即需要更長的時間,因爲所有的位必須等待最慢的一個)或「分開發送它們,只要它們可用「。基本上,你給自己時間來補貨。

我認爲最令人憤怒的情景是預訂航空公司/渡輪票,當你到達支付部分時,他們要麼超時,「沒有價格可用」或一些這樣的廢話。特別煩,因爲我是不完全買遊船的螺旋槳..

你可以做一個根禁令程序,在這裏你基本上說,當你有10個(或其他)離開的東西,它是顯示爲在前端「剩餘1件」。這意味着顧客A和顧客B同時購買都會得到他們的東西。然後警告會在公司內部進行採購:「我們正在」對象N「外面」。

我很想知道你的客戶正在銷售什麼樣的東西,大多數顧客購買了60個物品。