GAE中的事务分片计数器

时间:2012-05-22 04:31:53

标签: python google-app-engine transactions sharding

我需要更新分片计数器并返回当前计数。我在这里关注这个例子:https://developers.google.com/appengine/articles/sharding_counters

但我不确定您是否可以通过函数间接执行事务查询。以下是示例代码:

@db.transactional
def updateCounter(name):
    increment(name)
    get_count(name)

updateCounter(TOTAL_USERS)

这会返回当前计数递增吗?或者这种方法无效,因为数据库查询位于@ db.transactional函数之外?

2 个答案:

答案 0 :(得分:3)

* 不可能获得分片计数器的事务计数。分片计数器的工作方式是您可以在事务中更新它们,并在事务外部进行总结。通常,这不是问题,因为在计数每秒更新许多次的情况下使用分片计数器;计算的任何交易记录实际上在计算时都是不正确的。

* 可以通过使用XG事务为最多5个分片执行此操作,但这是一个非常糟糕的主意。首先,由于上述原因,其次是因为它会强制解决您在第一时间使用分片计数器时要避免的可扩展性问题。

答案 1 :(得分:0)

您可以在交易中only use ancestor queries

由于get_count()使用非祖先查询,因此他的代码会产生错误。