2012-05-04 17 views
8

根據Google App Engine文檔,使用高複製數據存儲時,寫入一個實體組的操作受限於每秒寫入一次。所以...Google App Engine HRD - 如果我寫入實體組的寫入次數超過1次寫入限制,該怎麼辦?

  1. 如果超出此限制會發生什麼情況?某種異常?我該怎麼做?
  2. 我如何知道我已接近超過此限制?我可以通過某種方式設計應用程序(添加實體...)不可能經常發生,但我自然不能保證這一點。

回答

9

每秒寫一次有點低。它實際上支持更多。我甚至會說每秒5到10次寫入,但我當然不能保證。

如果您達到此限制,您將得到一個例外是。異常消息是:
Too much contention on these datastore entities. please try again.

,但我不知道/記得確切的異常,這將提高。

您可以選擇重試,繼續或任何其他您認爲適當的選項。

你不能分辨你是否接近每秒寫入1次的限制。它發生了,你處理它。

+1

java.util.ConcurrentModificationException是您尋找的異常 –

+0

不,我不知道。不使用java;)。但如果我願意,那麼這可能是我尋找的異常。 – aschmid00

+0

HRD的限制實際上接近於1。 –

15

基於GAE中的文檔,並從我有限的經驗:

  1. 期待像1種QPS率和調整相應的應用程序。
  2. Sharding是處理數據存儲爭用的常見模式。
  3. 總是加防禦的代碼來處理每一個可能的例外(Application Error 5, The datastore operation timed out, Transaction collision for entity group,..)
  4. 在錯誤的情況下,重試寫在一個適當的TaskQueue中移動的任務,或者如果可以,只是提醒用戶再次嘗試。
  5. 重試一個寫,通常的作品。
  6. 如果可能,請使用寫入後緩存機制來移動寫入操作,這可能會導致爭用到MemcacheTaskqueue減慢數據存儲區命中率。
  7. 避免爭用的一個好方法是讓實體組保持較小,但不要指望太多。
  8. 即使在單個實體上也可能存在爭用。
相關問題