2014-09-04 17 views
0

我有一個GAE Golang應用程序,它應該能夠處理數百個併發請求,並且對於每個請求,我都會對輸入做一些處理,然後將其存儲在數據存儲區中。Golang on App Engine Datastore - 使用PutMulti提高性能

使用任務隊列(appengine/delay lib)我獲得了相當不錯的性能,但對於每個請求執行單行插入(即使使用任務隊列延遲插入)仍然效率很低。

如果這不是應用程序引擎,我可能會追加輸出文件,並且每隔一段時間我會批量使用cron作業/某種其他類型的定時服務將文件加載到數據庫中。

所以我的問題是:

  1. 有沒有我可以在App Engine上實現等效方案?我想 想 - 也許我應該寫一些memecache的行,然後 然後每隔幾秒我將批量加載從 那裏的所有行並清除緩存。
  2. 這真的需要嗎?數據存儲區 可以處理數千個併發寫入 - 每個http請求寫入我的 應用程序正在獲取?

回答

1

取決於您的設置。你在使用祖先查詢嗎?如果是這樣,那麼你的PER祖先(以及所有的孩子,大孩子)每秒只能寫入1次。數據存儲有一個自然隊列,所以如果你嘗試寫太快,它會排隊。如果你寫得太快,這隻會成爲一個問題。您可以閱讀一些最佳做法here

如果您認爲您將超過該限制,請使用pull queuesasync multi puts。你會把每個實體放入隊列中。使用支持的模塊(10分鐘超時),您可以批量提取條目(10-50-100 ...),然後批量執行put_async。它會處理它們以適當的速度。在工作時,您可以排隊下一批。只是要警惕超時。