4

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

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

有没有办法在使用时只获取某些属性ndb.get_multi()

4

2 回答 2

10

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

于 2012-08-13T19:28:50.960 回答
0

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

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

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

于 2019-02-12T00:25:53.310 回答