簡體   English   中英

Google-app-engine NDB iter keys_only

[英]Google-app-engine NDB iter keys_only

假設我有一個經常執行的查詢,很可能產生相同的結果。

使用時是否正確:

for key in qry.iter(keys_only=True):
    item = key.get()
    #do something with item

表現會比:

for item in qry:
    #do something with item

因為在第一個示例中,查詢只會加載密鑰,后續對key.get()調用將利用NDB的緩存機制,而示例2將始終從存儲中獲取實體? 或者我誤解了什么?

我懷疑第二種形式會表現得更好 - 總是有可能值不在緩存中,然后,假設你回來了多個實體,你將進行多次往返。 這很快就會變慢。

更好的方法確實是http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=118中顯示的內容 - 使用ndb.multi_get(q.fetch(keys_only = True))。 但如果你的緩存命中率太低,那就更糟了; 在這個問題上對此進行了廣泛的討論。

AFAIK它不會有任何不同,因為在內部,ndb緩存所有內容,包括查詢。 如果你要為每個人做其他事情,請嘗試async api。 這可以節省寶貴的時間。 編輯:此外,如果ndb提前知道查詢,它甚至可以預取它們。

我已經讀過六個月了,所以不確定當前的行為是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM