作者gpmm (銀色)
看板Soft_Job
標題Re: [請益] 資料庫同步的問題
時間Thu Oct 6 00:22:57 2011
※ 引述《lancer7 (158)》之銘言:
: 假設一個訂票系統有一個table:座位
: 欄位有日期、座位號碼、是否available、訂位人的ID
: 現在有兩個user: A, B進入了訂票系統
: 接著發生了以下事件
: 1. A select此table發現有五個空位
: 2. B select此table發現有五個空位
: 3. A 訂了四個位子,並且把這四個位子的狀態update為unavailable
: 4. A結束transaction
: 5. 現在B以為有五個空位,於是訂了兩個位子 => 發生重複訂位的問題
: 請問一下,有什麼辦法解決這個同步的問題?
: 我想到的方法是在事件1發生時讓A對table作lock,然後B要等到A結束transaction才能select
: 不過這方法效率似乎不好,有更好的方法嗎?
老實說這要處理的不應該是
技術上的問題,而是
規劃上的問題,
如果只以程式來說,
lock 層越往外,lock 的時間越長,空位的浮動率會越大,
lock 層越往內,lock 的時間越短,使用者會越晚被攔阻(較高的達成期望)
兩個方向上都各有利弊,
所以重點是要怎麼規劃這個訂購的流程,要在哪個步驟設下斷點,
當使用者在哪個步驟失敗(拿不到座位)時要怎麼說明 / 安撫。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.240.59
※ 編輯: gpmm 來自: 114.45.240.59 (10/06 00:23)
推 Ting1024:正確 10/06 02:04
推 pingsky:另外一個想法是搭配分散式處理, 把不同區段拆到另一台機器 10/06 09:13
→ pingsky:這樣在效率上受到的限制或許能較小一點 10/06 09:15
→ vyjssm:update之前,不能先read with lock?這樣別人read不到。 10/06 18:35
→ vyjssm:真要update,先check是否被別人訂走,也不能update。 10/06 18:36