Google-app-engine NDB iter keys_only

Kla*_*sen 4 python google-app-engine app-engine-ndb

假设我有一个经常执行的查询,很可能产生相同的结果.

使用时是否正确:

for key in qry.iter(keys_only=True):
    item = key.get()
    #do something with item
Run Code Online (Sandbox Code Playgroud)

表现会比:

for item in qry:
    #do something with item
Run Code Online (Sandbox Code Playgroud)

因为在第一个示例中,查询只会加载密钥,后续调用key.get()将利用NDB的缓存机制,而示例2将始终从存储中获取实体?或者我误解了什么?

Gui*_*sum 7

我怀疑第二种形式会表现得更好 - 总是有可能值不在缓存中,然后,假设你回来了多个实体,你将进行多次往返.这很快就会变慢.

更好的方法确实是http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=118中显示的内容- 使用ndb.multi_get(q.fetch(keys_only = True)).但如果你的缓存命中率太低,那就更糟了; 在这个问题上对此进行了广泛的讨论.