为什么只有键的查询是免费的?

用户名

根据此处的定价文档keys-only查询是免费的。因此,看来您可以通过执行以下操作(伪代码)来保存读取:

qo = ndb.QueryOptions(keys_only = True)
qry = ModelName.query().filter("name" = "Bob")
keys = qry.fetch(20, options = qo) #keys-only fetch

然后,我可以获取实体,每个实体的读取费用为1:

entities = ndb.get_multi(keys)

为什么认为这比获取实体(即执行仅键获取)更好?

另外,查询费用从何而来?什么时候fetch执行或何时query创建对象?

某人1

这不是“更好”的选择,您只需为每个查询节省1额外的读取成本。这是以额外的RPC请求和可计费实例时间为代价的。

当您执行普通查询(即非仅键查询)时,将返回您要查找的对象。运行查询的RPC请求也将开始获取查询匹配的每个对象,因此您可以更快地获得所有结果。根据查询的结果大小,所有这些都可以在单个RPC请求中获取(您可以进行调整batch_size以调整查询占用的RPC总数)。

查询的工作方式是通过单个RPC请求扫描索引以查找与查询匹配的所有键,如果它仅是键查询,则仅返回结果列表。如果是正常查询,它将开始获取所需的对象,并执行其他RPC请求以根据需要将其全部获取。

费用是在执行查询时发生的,因此在您的示例中fetch是在调用时。您只是在预先构建查询及其过滤器。

但是,按照自己的方式进行操作有一个好处:始终可以将获取的对象假定为一致的。也就是说,对于查询,不能保证您的结果与可能刚刚发生的任何更新“一致”。这两种方法最终都将遭受一致性的困扰,因为除非您执行祖先查询,否则可能无法从索引中一致地读取与查询匹配的对象,但是您的方法可以保证使用它们的键获取的对象确实是最多的。最新版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么只有键 len 的字典为零?

为什么此查询只有一个结果?

为什么在Java的TreeMap中重载可比时,键集中只有一个键

ODI为什么不将“唯一键”显示为增量或合并选项(为什么只有PK)?

为什么Go数据库库中只有两种查询类型?

为什么只有一个媒体查询不起作用?

为什么只有5时我才在此查询中获得前2行

为什么只有)是特殊字符而不是}或]?

elasticsearch聚合-为什么匹配所有查询不返回更特定查询的键?

为什么MySQL为复合键创建一个自动的“只有一个”索引?

只有一个媒体查询有效,但我不知道为什么

为什么此查询键查找?

为什么只有约30个节点并说50个关系,这个密码查询如此缓慢?

为什么只有在使用Windows Server作为网关时,我的Android手机才能进行DNS查询?

什么是文件“-”,为什么只有stat可以看到它?

为什么只有私人会员才有可能?

指定分区键时,为什么Azure Cosmos查询具有较高的RU?

为什么只有我的一些日志旋转?

为什么DOM只有在刷新时才更新

为什么 ThreadLocal 在 Java 中只有 threadLocalHashcode

为什么只有函数指针而不是函数变量?

为什么只有一个按钮?

为什么我只有一张专辑?

为什么只有一个警告循环?

为什么数字类型只有`to_string()`?

为什么runState签名只有状态参数?

为什么每个文件只有一个类

导入rxjs / Rx时为什么只有几个功能

为什么只有我的NSTimers之一工作?