Python 谷歌AppEngine:如何计算数据库';有超过1000个条目吗?

Python 谷歌AppEngine:如何计算数据库';有超过1000个条目吗?,python,google-app-engine,count,Python,Google App Engine,Count,副本 我想知道我有多少用户。在此之前,我通过以下代码实现了这一点: users = UserStore.all() user_count = users.count() 但现在我有1000多个用户,这个方法继续返回1000个 有没有一种有效的编程方法可以知道我有多少用户?像这些例子一样使用分页。这确实是一个重复,另一篇文章描述了理论上如何做到这一点,但我想强调的是,你真的不应该这样做。原因是BigTable的分布式特性对聚合来说确实是有害的。您可能要做的是向该实体添加事务计数器,如果有大量事

副本


我想知道我有多少用户。在此之前,我通过以下代码实现了这一点:

users = UserStore.all()
user_count = users.count()
但现在我有1000多个用户,这个方法继续返回1000个


有没有一种有效的编程方法可以知道我有多少用户?

像这些例子一样使用分页。

这确实是一个重复,另一篇文章描述了理论上如何做到这一点,但我想强调的是,你真的不应该这样做。原因是BigTable的分布式特性对聚合来说确实是有害的。您可能要做的是向该实体添加事务计数器,如果有大量事务,则添加分片计数器。见:


更新:由于1.3.1游标使类似的东西变得更容易:

我写了这个方法来计算查询,但是Nick Johnson怎么说这可能是个坏主意

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

自SDK版本以来,计数函数的限制已被取消。因此,对count函数的调用现在将返回实体的确切数量,即使实体数超过1000。唯一的限制是如果您有太多的实体,以至于在请求超时之前计数函数不会返回。

对于Python GAE SDK,您可以增加计数方法的参数“limit”:

+1000。计算每个请求的每个用户是一个非常糟糕的主意。我最终实现了这个!非常感谢,我的性能提高了很多(:不必实现切分计数器的另一种实现方法是访问数据存储统计信息。下面是对3种方法的完整解释,用于计算特定类型的条目数:不使用count(),而使用len()如何)?检查这里:该方法是从它仍然有1000个限制的时候开始的。