2012年11月20日 星期二

[學習] 多使用者 處理 同一筆資料 防止 race condition

系統架構
User1(程式)
                            <--------->       SV1(WebService)       <--------->       SV2(DataBase)
User2(程式)
       .
       .
       .
UserN(程式)


 (強碰問題~ 幾乎很少發生!!)
1.(程式-產生序號 Fetch From DB & +1) ex: sn+=1
當多個user同時處理同一筆record時~~
在不違反商業邏輯狀態下,直接覆蓋(update)前者的資料~~
每個record都會有記錄欄位,記錄修改者是誰~~

2.(程式-產生序號 Fetch From DB & +1) ex: sn+=1
在user1處理A-record時 不讓其它user同時處理A-record

user1(程式) 發出個訊息(參數) 給 SV1
其它user處理record時 並先與SV1判斷是否同record
若是 則告知其它user 目前不能用

-但會有網路斷線問題~~
-故需要一個機制~~
-那便是一個處理record的時間~~
-並在n分鐘內不讓其它使用者處理同一筆record~~

時間可存在 DataBase(同一筆record的欄位) 或 SV1

參考:
用 SELECT ... FOR UPDATE 避免 Race condition
数据库插入,多人操作,如何能做到绝对不重复插入?
select 後 insert
競爭危害

沒有留言:

張貼留言