2013-04-25 85 views
0

我有一個數據庫服務器(MySQL)。客戶之間的數據同步

這包含產品表。產品表的一個領域是剩餘數量。

我有幾個客戶(約10),將查詢剩餘的量,同時下訂單。一旦下訂單,剩餘數量將根據訂單減少。

當數量很少時,我會遇到一個問題:例如,如果剩餘數量爲「10」,並且client1正在爲8數量創建訂單(訂單尚未放置,但僅在過程中),並且client2將訂單5數量,那麼下訂單的客戶將失敗。

我想提高系統使得當一個客戶端是在訂購的過程中,那麼其他客戶端應該只顯示(剩餘量 - 客戶端1訂單數量)。起初,我想盡快在訂單表中輸入剩餘數量,但是當訂單被取消或者下訂單的計算機斷電/墜毀時,這會產生問題。

請建議我一些合適的算法有效地處理這種情況..每當訂單正在處理中,所有其他客戶端應該只看到(剩餘數量 - 爲了正在進行的數量)。

回答

1

答案之一可能是你的問題:

other clients should see only the (remaining quantity - order in progress quantity). 

所以你的問題是將數據存儲在「進行中的訂單」

有人添加一個「確認」屬性的訂單,它可以是設置爲真/假來維護正確的信息。或者你可以有一個單獨的結構來記錄正在進行的訂單,並在確認後將它們移到永久訂單表中。無論哪種方式,正如您所說,可用庫存(庫存 - 訂單進行中的數量),查詢會給你。

然後,您需要知道如何處理取消。如果取消是明確的 - 用戶更改他們的購物籃 - 很容易:取消訂單。唯一令人尷尬的情況是,當訂單沒有完成時:何時是「訂單進行中」而不是「進行中」?您可以設定一個給定的時間,訂單仍在進行中,並讓用戶知道,例如「你的訂單將保留在購物籃中24小時,之後優先給予其他客戶的股票」 - 或類似的東西。

您的系統將使用清理過程來比較當前的日期/時間與「訂單正在進行」的時間,如果訂單太舊,它將被取消 - 或者至少暫時擱置客戶端更新。