【问题标题】:Google AppEngine: how to count a database's entries beyond 1000?Google AppEngine:如何计算数据库的条目超过 1000 个?
【发布时间】:2010-10-22 04:51:15
【问题描述】:

重复 "how does one get a count of rows in a datastore model in google appengine?"


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

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

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

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

【问题讨论】:

    标签: python google-app-engine count


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • +1000。计算每个请求的每个用户是一个非常糟糕的主意。
      • 我最终实现了这个!谢谢一百万,我的表现进步了很多(:
      • 另一种无需实现分片计数器即可完成此任务的方法是访问数据存储区统计信息。以下是统计特定类型条目数的 3 种方法的完整说明:blog.svpino.com/2015/03/08/…
      【解决方案3】:

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

      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
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-06
          • 1970-01-01
          • 2010-11-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多