【问题标题】:Is the dynamo db scan smart to query only the partition if the scan's filter contains the partition key?dynamodb 扫描是否智能只查询扫描过滤器的分区包含分区键?
【发布时间】:2020-11-08 08:31:04
【问题描述】:

要在 dynamodbb 表中搜索数据,有 2 个选项:

  1. 扫描
  2. 查询

扫描搜索整个表,其中查询使用分区键的概念仅搜索包含给定键的分区。

这两个选项也支持使用过滤器。 dynamo db scan 选项是否智能以注意过滤器是否包含分区键,如果是,则仅在给定分区中使用搜索,还是仍然使用扫描方法扫描整个表?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    答案是 - Scan 操作将始终读取整个表格,并收取读取费用。如果您只想读取单个分区,则应改用Query

    允许ScanFilterExpression 涉及分区键,但通常仅在过滤条件留下大部分分区时才具有经济意义,而不仅仅是“pk=...”过滤器只留下一个分区。

    一般来说,对于ScanQuery,您应该了解FilterExpression始终在读取未过滤数据后运行。 p>

    【讨论】:

    • 哦,所以即使对于具有指定分区键的查询,FilterExpression 本质上是在应用程序级别运行
    【解决方案2】:

    扫描和查询的工作方式有两个主要区别。

    数据检索

    扫描将在所有分区上执行查找,而查询将仅查找单个分区。由于这种方法,扫描操作的成本将是整个 DynamoDB 表的 RCU,而查询在检索数据方面更有效。

    数据过滤

    扫描将在检索到整个数据集后执行过滤,这意味着即使您按分区键过滤,它也只会在数据集准备好后执行此过滤。查询操作对分区本身执行过滤,这将导致查询操作的 RCU 成本仅针对返回的项目,这更具成本效益。

    【讨论】:

      【解决方案3】:

      过滤器在扫描或查询操作检索到所有数据后运行,并且在操作正在进行时不应用。我建议尽可能使用查询,因为它更快且成本更低。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-25
        • 2011-08-03
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-05
        相关资源
        最近更新 更多