2009-04-28 86 views

回答

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

+2

+1000。计算每个用户的每个请求是一个非常糟糕的主意。 – 2009-04-28 09:59:55

+0

我最终实现了这个! 感谢百万,我的表现提高了很多(: – 2009-04-30 02:43:22

2

使用像这些例子的分页here

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 
2

由于SDK的版本1.3.6在计数功能上的限制1000已被删除。因此,对count函数的调用现在将返回确切数量的实体,即使有1000个以上的实体也是如此。唯一的限制是如果您有太多的实体以致在请求超时之前count函数不会返回。

相关问题