0

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

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

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

updateCounter(TOTAL_USERS)

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

4

2 回答 2

3

*无法获得分片计数器的事务计数。分片计数器的工作方式是您可以在事务中更新它们,并在事务之外对它们进行汇总。通常,这不是问题,因为分片计数器用于计数每秒更新多次的情况;计数的任何交易记录在计算时几乎都是不正确的。

*可以使用 XG 事务处理最多 5 个分片,但这是一个非常糟糕的主意。首先,由于上述原因,其次是因为它会带来与您试图通过首先使用分片计数器来避免的可伸缩性问题完全相同的问题。

于 2012-05-22T06:46:29.263 回答
0

您只能在事务中使用祖先查询。

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

于 2012-05-22T05:15:04.260 回答