AWS DynamoDB中的扫描与并行扫描?

Sky*_*ker 3 amazon-web-services amazon-dynamodb

在云存储系统中,AWS需求量很大.扫描过程需要更快.那么在哪种情况下扫描过程如何工作以及哪一个(扫描/并行扫描)更好?

  1. 如何在AWS DynamoDB中进行扫描?
  2. 并行扫描如何在AWS DynamoDB中运行?
  3. AWS DyanmoDB中的扫描与并行扫描?
  4. 什么时候首选Parallel Scan?
  5. 是否在扫描前应用了滤镜表达式?

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的扫描功能现在接受两个附加参数:

  • TotalSegments表示将同时访问该表的工作人员数.
  • 表示调用工作者要访问的表的段.

iii)两个参数一起使用时,将扫描限制在表格中的特定项目块.您还可以使用现有的Limit参数来控制单个扫描请求返回的数据量.

3. AWS DyanmoDB中的扫描与并行扫描?

答:

i)扫描操作一次只能读取一个分区.因此,需要并行扫描,以便一次更快地读取多个分区.

ii)顺序扫描可能无法始终充分利用预配置的读取吞吐量容量.因此需要并行扫描.

iii)并行扫描,对于某些类型的查询和扫描,您的成本最多可降低4倍.

4.何时首选Parallel Scan?

答:

如果满足以下条件,则可以选择并行扫描:

  • 表大小为20 GB或更大.

  • 表的配置读取吞吐量未得到充分利用.

  • 顺序扫描操作太慢.

5.扫描前是否应用了滤镜表达式?

答:不,在已经读取项目后应用FilterExpression; 过滤过程不消耗任何额外的读取容量单位.

资源链接:

  1. 扫描

  2. 并行扫描

  3. 示例 - 使用Java进行并行扫描

  4. 亚马逊DynamoDB - 平行扫描,4倍便宜的读取,其他好消息

  5. 避免突然爆发读取活动

  • 并行扫描并没有便宜 4 倍。这只是与并行扫描同时推出的另一项功能。https://aws.amazon.com/blogs/aws/amazon-dynamodb-parallel-scans-and-other-good-news/ (2认同)

F_S*_*O_K 6

解决何时应使用并行扫描而不是常规扫描的问题...

我的经验是,一旦表中的数据超过 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 秒。

有趣的结果是大桌子。这是根据并行扫描中的段数执行扫描的时间:

  • 1 段 - 120 秒
  • 4段30秒
  • 8段15秒
  • 16段8秒
  • 32段5秒
  • 64段3秒
  • 128段1.9s
  • 256段1.6秒
  • 512 段 - 1.4s
  • 1024 段 - 1.4s