众所周知,应用引擎中的 keys_only 查询速度很快。
Google App Engine 现在能够运行“投影查询”,它只能返回部分实体数据
https://developers.google.com/appengine/docs/python/ndb/queries?hl=pl#projection
假设我有一个具有大量属性和记录的模型(反序列化成本很高),我想知道运行在该对象上返回单个 KeyProperty 的投影查询与执行 keys_only 查询之间的性能差异是什么?
难道这两种方法都只使用索引,使它们具有同样的性能吗?或者,keys_only 查询内部是否有一些固有的东西可以使它更快?
一个简单的例子:
class SomeObject(ndb.Model):
user = ndb.KeyProperty()
之间的性能差异是什么:
SomeObject.query().fetch(1000, projection=["user"])
和
SomeObject.query().fetch(1000, keys_only=True)
为什么?
这不完全是“为什么”,但它足够接近:我正在权衡一个数据模型之间的差异
将数据拆分为单独的种类并使用实体组来 key_only 孩子然后 get_multi 父母(类似于 Bret Slatkins Google I/O 视频中显示的消息传递应用程序)
对比
将父键放入子表然后使用投影查询仅获取父键,然后 get_multi 父键
还有很多其他的考虑我不会让你厌烦......但如果我知道这个性能问题的答案,它会减少我的设计选项
是的,我可能会在本地进行自己的测试......但是从知情人士那里得到明确的答案会很棒......而且分享这些知识也很好,因为我无法在任何地方找到它到目前为止
谢谢!
更新
一些基本测试显示,keys_only 查询比完整查询快约 10 倍(这与研究一致)......并且单个 KeyProperty 上的投影查询所需时间大约是 keys_only 查询的两倍(所以大约快 5 倍)