2009-04-28 80 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函數不會返回。

相關問題