代码之家  ›  专栏  ›  技术社区  ›  RTF

DynamoDB表扫描的读取容量成本

  •  16
  • RTF  · 技术社区  · 9 年前

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

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

    我的理解是,这将导致表扫描,但DynamoDB将只返回我感兴趣的项目。但如果我的表中有10000个项目,而这些项目中只有5个项目通过了我的过滤器,那么我是否仍然需要为大量的读取容量单元“收费”?

    我用于过滤器的属性不是哈希、范围或辅助索引。我最近刚刚添加了该属性,但出乎意料的是,这就是为什么我不使用查询的原因。

    1 回复  |  直到 9 年前
        1
  •  19
  •   Smajl    9 年前

    简而言之,您将被“收取”扫描的项目总数(而不是退回的项目总数)。 扫描 查询 (正如你已经提到的)昂贵的手术。

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

    这取自官方文件:

    如果扫描的项目总数超过最大数据集大小 限制为1 MB,扫描停止,结果将作为 LastEvaluatedKey值以在后续扫描中继续扫描 活动结果还包括超过 限度扫描可能导致没有符合筛选条件的表数据。

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

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