3
我正在分類賬模塊上工作。在這個過程中,我不得不爲了完成這些任務如何防止選擇和更新之間的競爭條件
- 從源(表1 ROW1)
- 從目的地(表1 2行)選擇平衡
- 修改餘額一些邏輯
- 更新平衡選擇平衡源(表1 ROW1)
- 爲目的地(表1 ROW2)更新平衡
- 提交更改
- 插入交易成TRANSAC表格。
在多線程環境中,線程在前一個線程更新和提交之前獲得餘額。 在Postgres中,對於正在訪問的行直到線程提交時都會執行鎖定。在這種情況下,我看到了一片黑暗。
嘗試使用同步塊爲整個模式。沒有幫助。 無法使用SELECT FROM UPDATE,因爲用於更改餘額的邏輯取決於其他操作。
這是一些日誌,在[1]線程去更新部分之前,其他線程收集現有的餘額。
[DEBUG] [2016-12-15 10:49:53,893] [1] - Src Ledger_book_idLB001
[DEBUG] [2016-12-15 10:49:53,893] [1] - Src Balance2500.0
[DEBUG] [2016-12-15 10:49:53,897] [1] - Dest Ledger_book_idLB002
[DEBUG] [2016-12-15 10:49:53,897] [1] - Dest Balance0.0
[DEBUG] [2016-12-15 10:49:53,898] [15] - Src Ledger_book_idLB001
[DEBUG] [2016-12-15 10:49:53,898] [15] - Src Balance2500.0
[DEBUG] [2016-12-15 10:49:53,899] [16] - Src Ledger_book_idLB001
[DEBUG] [2016-12-15 10:49:53,899] [16] - Src Balance2500.0
[DEBUG] [2016-12-15 10:49:53,900] [16] - Dest Ledger_book_idLB002
[DEBUG] [2016-12-15 10:49:53,900] [15] - Dest Ledger_book_idLB002
任何幫助表示讚賞:)請評論如果有任何具體的疑問的情況。
你可以使用'serializable'隔離級別。 –
如果你正在更新'source',是什麼使它成爲'source'?來源和目的地有什麼區別? –
@EvanCarroll來源我的意思是源帳戶...我試圖從借方來源和信貸在目的地的借方。 – Vamsidhar