读取DynamoDB表扫描的容量成本

时间:2015-07-21 09:01:08

标签: amazon-web-services amazon-dynamodb

在阅读文档后,我不清楚在使用DynamoDB中的过滤器进行扫描操作期间消耗了多少读取容量单位。例如,使用此ruby请求:

table.items.where(:MyAttribute => "Some Value").each do |item_data|
   # do something with the item_data
end

我的理解是这会导致表扫描,但DynamoDB只返回我感兴趣的项目。但是如果我的表有10000个项目,那么只有5个项目通过我的过滤器我是否仍然被指控"对于大量的读取容量单位?

我用于过滤器的属性不是散列,范围或二级索引。我最近刚刚添加了该属性,而且出乎意料的是,这就是我不使用查询的原因。

1 个答案:

答案 0 :(得分:6)

简而言之,您将对扫描的项目总金额(不是退回的项目总金额)收取“费用”。 扫描查询(正如您已经提到的)相比,是一项昂贵的操作。

值得一提的是,当您在桌面上调用扫描时,并不意味着将扫描整个表格。如果扫描项目的大小超过1MB的限制,扫描将停止,您必须再次调用它以扫描表格的下一部分。

这取自官方文件:

  

如果扫描的项目总数超过最大数据集大小   限制为1 MB,扫描停止,结果返回给用户   一个LastEvaluatedKey值,用于在后续步骤中继续扫描   操作。结果还包括超过的项目数量   限制。扫描可能导致没有符合过滤条件的表数据。

在扫描找到的项目后应用过滤器,因此它根本不会影响吞吐量。

如果您要定期执行这些操作,可能需要考虑添加一些辅助索引或优化散列和范围键。