2014-11-25 32 views

回答

4

不是直接的,但可以使用transactions来模拟原子增量操作。在最简单的情况下,您使用单个实体并使用事务性读写增量。如果有一个并发增量,这样的事务将会失败,所以计数器不能很好地扩展。相反,您可以在n个实体上使用[('Counter', 'MyCounterX'), ('Elt', 'k')]形式的密钥(对于某些数字k)和属性'Count':

要递增,请选择1到n之间的随机数,并尝试事务性读写。如果密钥不存在,请在count = 1的给定密钥上编写一个新实体。如果交易失败,您可以重试一个新的随机数。您还可以包含应用程序的逻辑,以便随时增加n开始频繁竞争的时间。

要检索计数,请在Count属性上使用根[['Counter','MyCounterX')]进行祖先查询,然后合计所有计数。

你可以看到代码在第二个块here中实现它。

+0

太好了,谢谢你的回答。如果n足够大,它可以很好地扩展吗?或者是否使用Datastore做了很多这样的事情,例如统计/分析? – 2014-11-25 19:04:32

+0

阅读能力很好:投影查询速度快,价格便宜,使用祖先提供了很强的一致性。 写作并没有扩展,因为每个实体组的每秒1 txn有一个规定的限制,实际上每秒约10-20个。无论您制作多大n,都会达到此限制。 – Isaac 2014-12-05 06:25:09

相关问题