2011-03-06 74 views
2

我有n個並行任務正在運行。當所有這些任務完成後,我想創建另一個任務。做這個的最好方式是什麼 ?由於數據存儲操作速度較慢,因此我使用了memcache。每次完成任務後,我都會將計數器遞增1。我一直在檢查櫃檯n。由於memcache不可靠,因此計數器值有時會丟失。其他解決方案?Google App Engine屏障同步

+0

「由於memcache不可靠」 - 嗯?你有沒有想過這可能是你的代碼有錯? – 2011-03-06 01:10:59

+0

@Mitch:我認爲Sam指的是memcache可能會隨時驅逐任何條目的事實 - 因此不適合存儲您無法承受的價值(如上述Sam所述) 。 – 2011-03-06 02:26:55

+0

@戴維安德希爾:好,好點。 – 2011-03-06 02:55:54

回答

5

由於您不能丟失計數器,因此您需要使用數據存儲庫以確保計數器不會丟失(例如,由於意外的內存緩存驅逐)。但是,您可以使用也可以將值存儲在memcache中 - 這樣您仍然可以從memcache快速讀取計數器(如果memcache條目已過期,則轉到數據存儲以獲取計數)。

如果你有太多的並行運行任務,增加數據存儲計數器速度太慢,那麼考慮使用sharded counter來緩解這個瓶頸。

+0

我同意David,在GAE memcache中有對這種情況的原子操作,此計數器https://github.com/gregbayer/gae-livecount使用memcahe與數據存儲將值保存在單獨的任務中,我使用它並它運作非常好。我打算給分區櫃檯一個嘗試。 – 2013-08-06 02:17:56