12

重复 “如何在谷歌应用引擎的数据存储模型中获取行数?”


我想知道我有多少用户。以前,我使用以下代码实现了这一点:

users = UserStore.all()
user_count = users.count()

但现在我有超过 1,000 个用户,并且此方法继续返回 1,000 个。

是否有一种有效的编程方式来了解我有多少用户?

4

5 回答 5

14

它确实是重复的,另一篇文章描述了理论上如何做到这一点,但我想强调的是,你真的不应该以这种方式进行计数。原因是 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

于 2009-04-28T07:15:18.250 回答
2

在此处使用这些示例的分页。

于 2009-04-28T01:00:12.410 回答
2

从 SDK 版本1.3.6开始,计数功能的 1000 限制已被移除。因此,对 count 函数的调用现在将返回确切数量的实体,即使有超过 1000 个。唯一的限制是,如果您有这么多实体,在请求超时之前 count 函数不会返回。

于 2010-08-23T14:58:22.347 回答
0

我已经写了这个方法来计算一个查询,但是尼克约翰逊怎么说可能是个坏主意......

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
于 2010-08-23T12:11:44.217 回答
0

对于 Python GAE SDK,可以增加 count 方法的参数“limit”: https ://developers.google.com/appengine/docs/python/datastore/queryclass#Query_count

于 2012-10-11T17:32:29.080 回答