2011-03-06 80 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