我不知道如何在BigTable數據存儲中處理這個問題。在BigTable數據存儲中,關於併發性,如何「鎖定」實體?
想象一下下面的例子(只是爲了解釋這個概念的例子不符合我的實際數據模型。):
- 我有一個跟蹤交易數的數據存儲區的計數器實體。假設當前的「計數」爲100.
- 現在兩個Web請求同時讀取此值。
- 兩個Web請求添加一個新的交易
- 最後兩個更新計數器(至101)。
計數器值現在不準確的。它應該是102.
有關如何處理這種情況的任何建議?我可以'鎖定'計數器,以確保第二個Web請求甚至不會讀取直到第一個Web請求完成?
謝謝尼克。當你說「插入一個事務」時,你的意思是在db.run_in_transaction中執行一個函數嗎?當我在事務函數中執行「讀取」時,如果另一個線程嘗試訪問現在「過時」的值,它會「鎖定」對象並拋出錯誤嗎?謝謝,我還是新來的bigTable處理交易的方式:) – willem 2009-11-27 15:50:24
那麼,你稱爲你的實體「交易」,所以當我說「插入交易」時,我的意思是「插入一個'交易'實體」。然而,讀取內部事務是事務性的 - 只有使用樂觀併發而不是鎖定。 – 2009-11-27 17:19:46