2013-08-06 104 views
0

我正在使用Google App Engine和Datastore開發我的第一個Web應用程序。發展中的 過程非常簡單,但我有一個巨大的困境。我想爲 用戶的狀態(如Facebook的「喜歡」)創建一個「喜歡」的機制。更新數據存儲GAE中的實體併發性

所以我做了一個具有「likeIndex」屬性的「狀態」實體(我只想總計喜歡的)。現在我想確保當多個用戶同時給予狀態時,我不會遇到併發問題。

了我從我的數據存儲短的經驗教訓流程是這樣的:

  1. (上更新函數調用)用戶A和用戶B將採取與likeIndex = 0 statusA對象的相同版本 - 通話發生在同一時間。
  2. userA將使likeIndex ++;
  3. userA將使用likeIndex = 1更新statusA。
  4. userB將使likeIndex ++;
  5. userB將更新statusA likeIndex = 1。

而不是在數據存儲中有likeIndes = 2的statusA對象,我有likeIndex = 1的對象。 如何處理更新過程以避免併發問題。這聽起來很簡單和常見的問題,所以我很驚訝,我很難在網上找到解決方案。 (我正在使用JPA)

謝謝!

回答

2
  1. 您需要在事務中讀寫likeIndex。

  2. 如果您有大量喜歡的人(即超過1個/秒),您將遇到性能問題。你需要使用分片計數器。

幸運的是,有一個教程,一步步地解釋它。驚人!

https://developers.google.com/appengine/articles/sharding_counters

+0

我碰到這個解決辦法,但我想要去與傳統的交易之一。你知道使用EntityManager對象的交易指南嗎?非常感謝你! – Ohadza

相關問題