2012-02-02 148 views
1

我有幾個相同的應用程序獨立運行。每個從數據庫讀取一行(基於某些標準),執行一系列操作並最終更新該行。 因此我想確保一行開始被應用程序處理,不會被另一個處理。換句話說,我希望應用程序選擇下一個可用的行。 我該如何執行此操作?H2數據庫 - 併發連接策略

我嘗試了使用「select ... for update」的不同策略,MVCC,不同類型的事務隔離,但暫時沒有運氣。

回答

1

一個常見的解決方案是使用一個 '州' 列中:

  • 0不處理
  • 1處理
  • 2處理

當處理的行,設置狀態來1.處理完成後,將其設置爲2.這將適用於所有數據庫。

如果您想防止行處於「處理」狀態(例如因爲會話/連接已關閉),則可以添加一列'processing_session'並填充當前會話(函數SESSION_ID() )處理時。要查明會話是否仍然存在,請使用表INFORMATION_SCHEMA.SESSIONS