我想知道我有多少用户。以前,我使用以下代码实现了这一点:
users = UserStore.all()
user_count = users.count()
但现在我有超过 1,000 个用户,并且此方法继续返回 1,000 个。
是否有一种有效的编程方式来了解我有多少用户?
我想知道我有多少用户。以前,我使用以下代码实现了这一点:
users = UserStore.all()
user_count = users.count()
但现在我有超过 1,000 个用户,并且此方法继续返回 1,000 个。
是否有一种有效的编程方式来了解我有多少用户?
它确实是重复的,另一篇文章描述了理论上如何做到这一点,但我想强调的是,你真的不应该以这种方式进行计数。原因是 BigTable 的分布式特性对聚合确实很不利。您可能想要做的是向该实体添加一个事务计数器,如果有很多事务,一个分片计数器。请参阅:http ://code.google.com/appengine/articles/sharding_counters.html
更新:由于 1.3.1 游标使这样的事情变得更容易:http ://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Query_Cursors
在此处使用这些示例的分页。
从 SDK 版本1.3.6开始,计数功能的 1000 限制已被移除。因此,对 count 函数的调用现在将返回确切数量的实体,即使有超过 1000 个。唯一的限制是,如果您有这么多实体,在请求超时之前 count 函数不会返回。
我已经写了这个方法来计算一个查询,但是尼克约翰逊怎么说可能是个坏主意......
def query_counter (q, cursor=None, limit=500):
if cursor:
q.with_cursor (cursor)
count = q.count (limit=limit)
if count == limit:
return count + query_counter (q, q.cursor (), limit=limit)
return count
对于 Python GAE SDK,可以增加 count 方法的参数“limit”: https ://developers.google.com/appengine/docs/python/datastore/queryclass#Query_count