You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Datastore中NDB查询命中实体与get()操作的定价计数规则是否相同?

NDB查询与按键get()的Datastore读取成本对比结论

两种操作的读取成本完全不一致,通过查询查找实体的方式成本绝不会更低,绝大多数场景下反而比直接按键get()更高。

具体计费规则差异

  • 按键直接执行get():属于Datastore标准单实体读取操作,每成功获取1个实体仅收取1次单实体读取单位的费用。如果命中NDB自带的上下文缓存、配套memcache缓存,不会产生Datastore服务端的读取计费。
  • NDB普通查询(返回完整实体):计费拆分为两个独立部分,总开销是两部分之和:
    • 索引检索阶段:每扫描1条索引条目,收取1次小读取费用,小读取的单位成本约为单实体读取的1/10。这部分开销和最终返回的实体数量无关,只和查询实际扫描的索引条目数挂钩,哪怕查询最终返回0个结果,只要扫描了索引就会计费。
    • 实体拉取阶段:查询结果中每返回1个完整实体,和直接get()一样收取1次单实体读取费用。

举个常见场景的成本计算示例:你要查询User类型下email = "test@example.com"的单个实体,因为没有对应实体的key,只能走查询。该查询在索引层共扫描了15条索引条目才定位到目标实体,最终返回1个完整实体。该操作的总开销为15次小读取 + 1次单实体读取,折算后约等于2.5次单实体读取的成本,远高于直接拿key执行get()的1次单实体读取成本。

特殊场景说明

如果使用keys-only查询(仅获取实体key、不返回实体内容),只会产生索引扫描阶段的小读取费用,不会产生实体拉取阶段的单实体读取费用。但如果拿到key后还需要获取实体完整内容,仍需额外执行get()操作,总开销依然高于直接持有key时调用get()的成本。

另外要注意:如果查询没有配置匹配的索引,导致索引层大范围扫描,产生的小读取开销会远高于预期,极端场景下甚至可能出现“查1个实体花了上百次读取成本”的情况。

内容的提问来源于stack exchange,提问作者user1961

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:31:02