如何在DynamoDB查询中计算消耗的读取容量单位

zub*_*uba 4 amazon-web-services amazon-dynamodb aws-lambda alexa-skills-kit

我看过亚马逊上的页面,并且了解到1 RCU是4KB的项目。

如果我有一个包含50个项目的表,我已经读过一次扫描将读取全部50个项目并使用50个RCU。但是可以说我做了一个查询,我的表是10 x 5,它还会使用50个RCU吗?

Mik*_*scu 12

仅当合并的50个项目的总大小等于200KB(对于高度一致的读取,或对于最终的一致读取的400KB)时,扫描包含50个项目的表将消耗50个RCU。大多数项目不是那么大,因此50个项目通常只需要大约10KB的存储空间,这意味着对50个项目的表进行全面扫描(最终一致性)仅花费3 RCU。

消耗的读取容量单位(RCU)取决于多个因素:

如果使用GetItem操作读取某项,则消耗的容量将根据该项的大小以4KB的增量计费(即200B项和3KB项各自消耗1RCU,而5KB项将消耗2RCU) )

如果使用“ 查询”或“ 扫描”操作读取了多个项目,则消耗的容量取决于所访问项目的累积大小(即使使用过滤器,即使从查询或扫描中过滤出的项目,也要向您收取费用)。因此,如果您的查询或扫描访问10个项目,每个项目的大小约为200个字节,则它将仅消耗1个RCU。如果您阅读10个项目,但每个项目的大小约为5KB,那么总消耗容量将为13个RCU(50KB / 4KB = 12.5,向上舍入为13)

此外,如果执行最终的一致读取,则可以使每个容量单位的大小增加一倍。因此,读取10个5KB项仅需花费7个RCU。

您可以在此处阅读有关吞吐能力的更多信息

需要注意的几件事:

  • 单个项目可能多达400KB,因此读取一个项目可能会消耗多达100个RCU。
  • 在计算项目大小时,属性名称也将计入项目大小,而不仅仅是其值!

  • 有用的总结。然而,我不清楚“访问”是什么意思。如果我根据哈希键进行查询,我的查询是否只能访问具有该键的项目?排序键怎么样? (2认同)
  • 我问的是复合键(由散列键 + 排序键组成):多个项目可能具有相同的散列键。在运行查询时,我指定了散列键 + 排序键的约束(例如 BETWEEN 条件),哪些项目会被访问?具有相同哈希键的所有项目,还是仅匹配排序键约束的项目? (2认同)

小智 5

查询 - 读取具有相同分区键值的多个项目。返回的所有项目都被视为单个读取操作,其中 DynamoDB 计算所有项目的总大小,然后向上舍入到下一个 4 KB 边界。例如,假设您的查询返回 10 个项目,其组合大小为 40.8 KB。DynamoDB 将操作的项目大小四舍五入为 44 KB。如果查询返回 1500 个项目,每个项目 64 字节,则累积大小为 96 KB。

参考:https : //docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/ProvisionedThroughput.html