有没有办法为ndb.get_multi()指定投影?

时间:2012-08-13 14:57:03

标签: google-app-engine app-engine-ndb

使用NDB,可以为查询指定projection,允许限制为与查询匹配的实体检索的属性数。

但是,我在文档中找不到有关如何在使用ndb.get_multi()时指定投影的任何内容,ndb.get_multi()总是提取完整的实体。

使用{{1}}时,有没有办法只提取某些属性?

2 个答案:

答案 0 :(得分:9)

不,投影功能仅适用于查询。投射get()操作没有任何优势(就更少的I / O操作而言)。

答案 1 :(得分:0)

我最终遇到了这样的情况:对ndb.get_multi()使用投影确实可以提高性能。我有一个具有约25个属性的大型实体类,其中有些甚至重复了。我需要get_by_id大约10个这些对象才能为我的应用中的每个网页提供服务,但是每个对象只需要4个属性。如果我使用普通的ndb.get_multi()来实现,那么大约有一半的前端CPU时间最终会花在名为Model._from_pb的NDB API方法中,即反序列化从数据库中读取的对象。这似乎可以通过投影来改善,并且确实,在我的情况下,通过以下方式使用投影可以将整体响应时间减少一半:

Product.query(Product.key.IN(keys_to_get)).fetch(projection=list_of_columns)

Product是我的实体类的名称。当然,在这种情况下,查询需要一个新的索引。