2017-01-03 80 views
0

我的應用程序目前面臨的一個問題是,競爭條件有時會導致多個線程將相同的值寫入數據存儲。查詢Google App Engine數據存儲時的併發問題

的僞代碼如下所示:

public void writeToDatastore(ValueObject obj){ 
    boolean objectExists = checkDatastoreForObject(obj); 

    if(!objectExists){ 
     doSomeStuff(); 
     writeObjectToDatastore(obj); 
    } 
} 

有時候,從任何已被寫入之前數據存儲,這導致了物體的多個實例讀取兩個或多個線程正在持續。

添加​​關鍵字(或其他併發結構)可解決問題 - 前提是應用程序只有一個實例正在運行。

在分佈式環境中如何解決這些類型的併發問題?

+0

你可以手動指定密鑰ID,如果你對每個價值的獨特屬性。然後,寫入寫入現有值的頂部。 – GAEfan

回答

0

請參閱本:https://cloud.google.com/appengine/articles/scaling/contention

避免數據存儲區爭 - 當 單一實體或實體羣組太快更新出現數據存儲區爭。數據存儲 將排隊併發請求以等待輪到。 中的請求等待超時時間的隊列將引發併發異常。 如果您希望更新單個實體或每秒向多個實體寫入實體 ,最好儘早重新設計您的 設計,以避免部署應用程序 後可能發生的爭用。

相關問題