摘自这篇关于分片计数器的文章,以下函数演示了如何在增加随机分片之前对其进行选择。这发生在事务中。
def increment():
"""Increment the value for a given sharded counter."""
def txn():
index = random.randint(0, NUM_SHARDS - 1)
shard_name = "shard" + str(index)
counter = SimpleCounterShard.get_by_key_name(shard_name)
if counter is None:
counter = SimpleCounterShard(key_name=shard_name)
counter.count += 1
counter.put()
db.run_in_transaction(txn)
一次只能发生一个事务,这不会阻止不同(随机)分片计数器同时更新吗?如果是这样,如果一次只能更新一个分片计数器,那么分片计数器的目的是什么?
谢谢!