0
所以我正在用Spring和Hibernate構建一個Java webapp。在應用程序中,用戶可以添加點到一個對象,我想計算給定的對象的點數。這些對象也存儲在數據庫中。希望有成百上千的人同時給予對象點數。我應該在哪裏處理相同數據的併發操作?在應用程序或數據庫中?
但是,如何計算點並將它們同時保存在數據庫中?通常我只是在我的物體上有一個屬性,只是增加點數。但這意味着我必須用悲觀事務來鎖定數據庫中的數據,以防止出現併發問題(讀取點數時,另一個線程已經完成了一半的更改)。這可能會讓我的應用程序變得更慢(至少我以爲會這樣)。
另一種解決方案是將相關對象中給定點的數量存儲起來,並將它們分別存儲在數據庫中,同時計算「小」同步塊內存中的點數等。
哪個解決方案在處理同一對象上的許多併發操作時性能影響最小。或者還有其他配件解決方案嗎?
好吧,這聽起來很合理,但你說,MySQL會給我最後承諾的價值。如果兩個請求同時讀取該值並嘗試向db寫入新值,會發生什麼情況?最後一個寫入錯誤還是會阻止第二個請求繼續執行直到第一個請求完成? – suicide 2011-05-05 16:49:46
啓動事務,讀取值,寫入遞增值,提交事務。一切安全。 – 2011-05-12 01:29:55