Sky*_*ker 3 amazon-web-services amazon-dynamodb
在云存储系统中,AWS需求量很大.扫描过程需要更快.那么在哪种情况下扫描过程如何工作以及哪一个(扫描/并行扫描)更好?
Sky*_*ker 10
1. AWS DynamoDB中的扫描方式如何?
答:
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.
Run Code Online (Sandbox Code Playgroud)
2.并行扫描如何在AWS DynamoDB中运行?
答:
i)为了在大型表或二级索引上实现更快的性能,应用程序可以请求并行扫描操作.
ii)您可以并行运行多个工作线程或进程.每个工作人员将能够与其他工作人员一致地扫描表格的单独部分.DynamoDB的扫描功能现在接受两个附加参数:
iii)两个参数一起使用时,将扫描限制在表格中的特定项目块.您还可以使用现有的Limit参数来控制单个扫描请求返回的数据量.
3. AWS DyanmoDB中的扫描与并行扫描?
答:
i)扫描操作一次只能读取一个分区.因此,需要并行扫描,以便一次更快地读取多个分区.
ii)顺序扫描可能无法始终充分利用预配置的读取吞吐量容量.因此需要并行扫描.
iii)并行扫描,对于某些类型的查询和扫描,您的成本最多可降低4倍.
4.何时首选Parallel Scan?
答:
如果满足以下条件,则可以选择并行扫描:
表大小为20 GB或更大.
表的配置读取吞吐量未得到充分利用.
顺序扫描操作太慢.
5.扫描前是否应用了滤镜表达式?
答:不,在已经读取项目后应用FilterExpression; 过滤过程不消耗任何额外的读取容量单位.
解决何时应使用并行扫描而不是常规扫描的问题...
我的经验是,一旦表中的数据超过 2MB,并行扫描就会比常规扫描更快,而且粗略地说,您似乎可以通过表中每 1MB 数据运行一个段来优化性能。
我有三个表,每个表都按需配置。包含 300 个项目和 70KB 数据的小型表。包含 1,800 个项目和 4MB 数据的小表。以及一个包含 110 万个项目和 1.05GB 数据的大表。
我可以通过将此命令放入名为 scan.sh 的 shell 脚本中来计时定期扫描
aws dynamodb scan --table-name MyTable --select COUNT
Run Code Online (Sandbox Code Playgroud)
然后执行
time scan.sh
Run Code Online (Sandbox Code Playgroud)
我可以通过将 shell 脚本中的命令替换为
aws dynamodb scan --table-name MyTable --total-segments 4 --segment 0 --select COUNT
Run Code Online (Sandbox Code Playgroud)
上述命令分 4 段运行扫描,并且只执行 4 段之一。我在应用程序中使用 DynamoDBMapper (Java SDK),该 SDK 负责并行运行不同的线程。
在我的小桌子上,每次扫描需要 1.4 秒,并且运行并行扫描没有任何区别。在我的小桌子上,常规扫描需要 1.8 秒,并行扫描最好有 4 个段,运行时间为 1.4 秒。
有趣的结果是大桌子。这是根据并行扫描中的段数执行扫描的时间:
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |