2012-09-30 55 views
1

我正在用谷歌應用程序引擎做一個網站,但我有一個關於服務器端servlet的問題,以及它們如何與數據存儲數據庫互動。谷歌應用程序引擎(Java):servlets,數據存儲和多線程

基本上,它回到了讀 - 修改 - 寫的傳統競爭條件;即我正在從數據存儲中讀取一個實體,可能會更新它,然後寫入更新(如果有的話)。

基本上,我可以同步訪問數據存儲嗎?我需要嗎?據我所知,服務器可以產生儘可能多的servlet實例,我在我的「幕後」東西中使用了靜態方法,所以我確實認爲我可以將靜態方法與靜態鎖定對象同步。

基本上,我不知道什麼防禦競賽條件/等我做/不需要採取。如果在某個地方有方便的指南,那會很棒,但我似乎找不到一個。

回答

1

否​​策略會幫助您,因爲它不僅僅是(僅)GAE可以產生許多servlet實例,而且還有許多不同的虛擬機。 爲解決防止數據存儲一致性問題的基本問題,您必須訪問原子事務中的數據。檢查這裏:Transactions

1

我不知道GAE和他們的數據存儲,但在標準的servlet中,容器創建了每個servlet的一個實例,並同時訪問該servlet。這在你的問題上沒有太大的改變。

同步對數據存儲的訪問是一個壞主意。首先這將很快成爲瓶頸,因爲只有一個客戶端可以訪問數據庫,而其他客戶端則需要等待。這是無法接受的。如果您的應用程序部署在多臺服務器上,您的解決方案也會中斷​​塊未被聚類。

你在找什麼是交易 - 它好像App Engine Datastore supports them

相關問題