2013-05-05 53 views
0

獲取AppEngine數據存儲查詢大小的最有效方法是什麼?獲取AppEngine數據存儲查詢大小的最有效方法

說我有一個查詢過濾器,使得檢索到的實體的數量是N.是否有可能得到N的值,而不進行完整的數據存儲檢索?

我已經找到了最有效的方法是使用「鍵只有」查詢,從而:

Query q = new Query("MyKind").setKeysOnly(); 
q.setFilter(someFilter); 
PreparedQuery pq = datastore.prepare(q); 
long N = pq.asList().size(); 

有沒有更好的辦法?如果我只想知道N的大小是否超過某個值,是否有更有效的方法?

謝謝。

回答

1

爲什麼不使用countEntities? https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/PreparedQuery#countEntities(com.google.appengine.api.datastore.FetchOptions)

您也可以在分片計數器中自己跟蹤計數。另一個想法是如果你只需要一個估計嘗試一個最終一致的查詢應該更快。

+0

D'oh!我怎麼會錯過?即便如此,從數據存儲配額的角度和從延遲的角度來看,我們是否希望降低成本? – aez 2013-05-05 19:51:06

+0

你必須測試確定,但我的猜測是他們會非常接近。你會返回略少的信息(一個數字而不是一個鍵列表),但它應該接近。如果你真的需要低延遲計數的項目,你應該研究一個分片計數器。 – jcjones1515 2013-05-05 21:14:22

+0

countEntities的限制爲1000 – 2013-06-14 22:46:02