2010-06-07 80 views

回答

14

您可以使用Datastore Statistics高效地獲取特定類型的所有實體(即表中的行數)的計數。簡單示例:

from google.appengine.ext.db import stats 
kind_stats = stats.KindStat().all().filter("kind_name =", "NameOfYourModel").get() 
count = kind_stats.count 

你可以找到如何獲得最新統計here更詳細的例子(GAE可以保持統計數據的多個副本 - 一個5分鐘前,一個30分鐘之前,等等)。

請注意,這些統計數據不會不斷更新,因此它們落後於實際計數。如果您真的需要實際的計數,那麼您可以在自己的自定義統計信息表中跟蹤計數,並在每次創建/刪除實體時更新它(儘管這樣做會相當昂貴)。

更新03-08-2015:使用數據存儲統計可能導致陳舊的結果。如果這不是一個選項,另外兩種方法是保留一個櫃檯或分片櫃檯。 (You can read more about those here)。如果您需要實時結果,請僅查看這兩項。

7

在App Engine中沒有「Select count(*)」的概念。您需要執行以下操作之一:

  1. 在查詢時對所需實體執行「僅鍵」(索引遍歷)並逐個對它們進行計數。這具有讀取速度慢的代價。
  2. 寫入時更新計數 - 這具有讀寫速度極快的優點,每次寫入/更新的成本更高。成本:你必須提前知道你想要計算什麼。寫入時您將支付更高的成本。
  3. 使用任務隊列,cron作業或新的Mapper API異步更新所有計數。這具有半新鮮的折衷。
+0

這是這可能是更合適的是取決於需求的數據存儲的統計數據API的所有偉大的替代品應用。 – 2010-06-07 21:54:56

3

你可以不計數。使用com.google.appengine.api.datastore.Query如下谷歌應用程序引擎的列:

int count; 
    Query qry=new Query("EmpEntity"); 
    DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); 
    count=datastoreService.prepare(qry).countEntities(FetchOptions.Builder.withDefaults()); 
+1
相關問題