[英]Concurrent writes to different properties of GAE Datastore Entity
我正在使用 Java 風格的 Google Appengine,我正在嘗試執行以下操作:
1 - 創建一個屬性 COUNT 為 0 的實體。
2a - 啟動執行某些網絡調用的任務隊列任務,並更新同一實體的 STATUS 屬性(使用Datastore#put
)
2b - 同時,在原始“線程”中,為 COUNT 保存一個不同的數字。 (也使用Datastore#put
)
鑒於2a
和2b
可能在完全相同的時刻並行完成,但它們更新兩個不同的屬性( STATUS
和COUNT
),它們是否會像並發修改異常一樣發生沖突或拋出?
正如 Igor Artamonov 評論的那樣,僅更改實體的一個屬性仍然需要重新編寫整個實體。 考慮到這一點,您正在查看 2 個實體寫入,它們必須在事務內部完成以防止相互覆蓋。
如果與 2a 中入隊任務關聯的事務在提交 2b 事務之前開始,則您描述的流程將導致事務沖突。
2a 任務執行被延遲 - 它會是稍后發送到您的應用程序的請求(實際延遲取決於您的應用程序此時的負載及其可擴展性配置)。 它可以有很多長於2B執行。 或者它可能很小,允許 2a 在 2b 結束之前開始。
我建議更改操作的順序以使其更具可預測性,並且作為副作用,最大程度地減少事務沖突/重試的機會:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.