【发布时间】:2020-11-08 08:31:04
【问题描述】:
要在 dynamodbb 表中搜索数据,有 2 个选项:
- 扫描
- 查询
扫描搜索整个表,其中查询使用分区键的概念仅搜索包含给定键的分区。
这两个选项也支持使用过滤器。 dynamo db scan 选项是否智能以注意过滤器是否包含分区键,如果是,则仅在给定分区中使用搜索,还是仍然使用扫描方法扫描整个表?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb
要在 dynamodbb 表中搜索数据,有 2 个选项:
扫描搜索整个表,其中查询使用分区键的概念仅搜索包含给定键的分区。
这两个选项也支持使用过滤器。 dynamo db scan 选项是否智能以注意过滤器是否包含分区键,如果是,则仅在给定分区中使用搜索,还是仍然使用扫描方法扫描整个表?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb
答案是否 - Scan 操作将始终读取整个表格,并收取读取费用。如果您只想读取单个分区,则应改用Query。
允许Scan 和FilterExpression 涉及分区键,但通常仅在过滤条件留下大部分分区时才具有经济意义,而不仅仅是“pk=...”过滤器只留下一个分区。
一般来说,对于Scan 和Query,您应该了解FilterExpression始终在读取未过滤数据后运行。 p>
【讨论】:
FilterExpression 本质上是在应用程序级别运行
扫描和查询的工作方式有两个主要区别。
数据检索
扫描将在所有分区上执行查找,而查询将仅查找单个分区。由于这种方法,扫描操作的成本将是整个 DynamoDB 表的 RCU,而查询在检索数据方面更有效。
数据过滤
扫描将在检索到整个数据集后执行过滤,这意味着即使您按分区键过滤,它也只会在数据集准备好后执行此过滤。查询操作对分区本身执行过滤,这将导致查询操作的 RCU 成本仅针对返回的项目,这更具成本效益。
【讨论】:
过滤器在扫描或查询操作检索到所有数据后运行,并且在操作正在进行时不应用。我建议尽可能使用查询,因为它更快且成本更低。
【讨论】: