gpt4 book ai didi

python - keys_only 查询和针对单个 KeyProperty 的投影查询之间的性能差异是什么?

转载 作者:行者123 更新时间:2023-11-28 19:29:41 26 4
gpt4 key购买 nike

众所周知,应用引擎中的 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)

为什么?

这不完全是“为什么”,但它已经足够了:我正在权衡数据模型与

将数据拆分为单独的 Kinds 并使用实体组来 keys_only the child 然后 get_multi the parents(类似于 Bret Slatkins Google I/O 视频中显示的消息应用)

对比

将父键放入子表然后使用投影查询只获取父键,然后get_multi parents

还有很多其他的考虑因素我不会让您厌烦...但是如果我知道这个性能问题的答案,它会减少我的设计选择

是的,我可能会在本地进行自己的测试......但是如果能从知情人士那里得到明确的答案就太棒了......而且分享这些知识也很好,因为我无法做到到目前为止在任何地方都可以找到它

谢谢!


更新

一些基本测试表明 keys_only 查询比完整查询快 10 倍(这与研究一致)......并且单个 KeyProperty 上的投影查询大约是 keys_only 查询的两倍(所以大约快 5 倍)

最佳答案

非常简单。 Keys_only 参数比投影更快,因为仅从数据库中获取您提供的对象的键。投影为该对象提供 key 并剪切其数据。投影执行是这样的:

  1. 从数据库中获取 key
  2. 使用key读取对象
  3. 减少不需要的数据

Keys_only 执行仅是该列表中的第一个点。我写的那个流程不是 100% 正确的,因为 GAE 在一个步骤中执行第二步和第三步,但该列表应该向您展示为什么这样工作以及为什么您在结果之间获得差异。

关于python - keys_only 查询和针对单个 KeyProperty 的投影查询之间的性能差异是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com