在阅读文档后,我不清楚在使用DynamoDB中的过滤器进行扫描操作期间消耗了多少读取容量单位。例如,使用此ruby请求:
table.items.where(:MyAttribute => "Some Value").each do |item_data|
# do something with the item_data
end
我的理解是这会导致表扫描,但DynamoDB只返回我感兴趣的项目。但是如果我的表有10000个项目,那么只有5个项目通过我的过滤器我是否仍然被指控"对于大量的读取容量单位?
我用于过滤器的属性不是散列,范围或二级索引。我最近刚刚添加了该属性,而且出乎意料的是,这就是我不使用查询的原因。
答案 0 :(得分:6)
简而言之,您将对扫描的项目总金额(不是退回的项目总金额)收取“费用”。 扫描与查询(正如您已经提到的)相比,是一项昂贵的操作。
值得一提的是,当您在桌面上调用扫描时,并不意味着将扫描整个表格。如果扫描项目的大小超过1MB的限制,扫描将停止,您必须再次调用它以扫描表格的下一部分。
这取自官方文件:
如果扫描的项目总数超过最大数据集大小 限制为1 MB,扫描停止,结果返回给用户 一个LastEvaluatedKey值,用于在后续步骤中继续扫描 操作。结果还包括超过的项目数量 限制。扫描可能导致没有符合过滤条件的表数据。
在扫描找到的项目后应用过滤器,因此它根本不会影响吞吐量。
如果您要定期执行这些操作,可能需要考虑添加一些辅助索引或优化散列和范围键。