在云存储系统中,AWS的需求非常高。扫描过程需要更快的速度。那么扫描过程是如何工作的,哪个(Scan / Parallel Scan)在哪种情况下更好?
- AWS DynamoDB中的扫描如何工作?
- AWS DynamoDB中的并行扫描如何工作?
- AWS DyanmoDB中的Scan vs Parallel Scan?
- 什么时候会优先选择Parallel Scan?
- 过滤表达式是否在扫描之前应用?
在云存储系统中,AWS的需求非常高。扫描过程需要更快的速度。那么扫描过程是如何工作的,哪个(Scan / Parallel Scan)在哪种情况下更好?
1. AWS DynamoDB中的扫描操作是如何工作的?
Ans:
i) 扫描操作将返回一个或多个项目。
ii) 默认情况下,扫描操作按顺序进行。
iii) 默认情况下,Scan在访问表中的数据时使用最终一致性读取。
iv) 如果扫描的项目总数超过1 MB的最大数据集大小限制,则扫描将停止,并将结果作为LastEvaluatedKey值返回给用户,以便在随后的操作中继续扫描。
v) 默认情况下,扫描操作执行最终一致性读取,它可以返回高达1 MB(一个页面)的数据。因此,单个扫描请求可能会消耗大量资源。
(1 MB page size / 4 KB item size) / 2 (eventually consistent reads) = 128 read operations.
2. AWS DynamoDB中的并行扫描是如何工作的?
答:
i) 在大型表或辅助索引上,应用程序可以请求并行扫描操作以获得更快的性能。
ii) 您可以并行运行多个工作线程或进程。每个工作器将能够与其他工作器同时扫描表的单独段。 DynamoDB的扫描函数现在接受两个额外的参数:
iii) 当一起使用这两个参数时,会将扫描限制在表中特定块的项中。您还可以使用现有的Limit参数来控制单个扫描请求返回多少数据。
3. AWS DyanmoDB中的Scan和Parallel Scan有什么区别?
答:
i) 扫描操作一次只能读取一个分区。因此需要并行扫描来快速读取多个分区。
ii) 顺序扫描可能无法充分利用所提供的读取吞吐量容量。因此需要并行扫描。
iii) 并行扫描可以将某些类型的查询和扫描成本降低多达4倍。
4. 什么情况下会选择并行扫描?
答:
如果满足以下条件,那么并行扫描可能是正确的选择:
表大小为20 GB或更大。
表的预配读取吞吐量没有被充分利用。
顺序扫描操作太慢了。
5. 过滤表达式是在扫描之前应用的吗?
答:不是,FilterExpression是在项已经被读取后应用的;过滤的过程不会消耗任何额外的读取容量单位。
讨论何时应该使用并行扫描而不是常规扫描的问题...
我的经验是,当表中数据超过2MB时,并行扫描比常规扫描更快,大致上来说,在表中每1MB数据运行一个段可以优化性能。
我有三个表,每个表根据需要进行配置。一个微小的表包含300个项目和70KB数据。一个小表包含1,800个项目和4MB数据。一个大表包含1.1百万个项目和1.05GB数据。
我可以通过将此命令放入名为scan.sh的shell脚本中来计时常规扫描:
aws dynamodb scan --table-name MyTable --select COUNT
time scan.sh
我可以通过在shell脚本中替换命令,来计算并行扫描的时间。
aws dynamodb scan --table-name MyTable --total-segments 4 --segment 0 --select COUNT