DynamoDB - 扫描一个7.5GB的表格

0

【以下的问题经过翻译处理】 IHAC试图将一个7.5GB和7M行,每行0.4KB的DynamoDB表加载到内存中,发现需要约十分钟时间。 假设分区键不是问题,加速该过程的好方法是什么?我想到了以下几种方法:

  1. 并行加载而不是顺序加载
  2. 批量加载小项(例如通过Firehose等)并进行批量加载

期待听到您的想法!

profile picture
专家
已提问 4 个月前28 查看次数
1 回答
0

【以下的回答经过翻译处理】 通常,我们建议客户使用多个线程执行并行扫描。以下 AWS 文档详细说明了并行扫描的工作原理: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.ParallelScan

使用扫描 API 调用,每个扫描返回 1MB 数据。假设每个 API 调用的往返延迟约为50毫秒,那么单个线程可以每秒执行约20个扫描 API 调用。换句话说,每个线程每秒可以扫描约20MB 数据。

在具有 16 vCPU 核心的 Amazon EC2 实例上,每个 vCPU 核心运行一个线程。您将实现大约 300 MB/s 的吞吐量。通过这个近似值,您可以在7500 / 300 = 25秒内完成任务,不到1分钟的时间。

如果您想将数据从Amazon DynamoDB加载到内存中,则需要使用可以由多个线程共享且线程安全的数据结构。在Java中,您需要考虑诸如并发集合之类的事情。

如果您想将数据从 Amazon DynamoDB 导出到磁盘(导出),可能需要参考 github 上的 DDBImportExport 项目,我将其开发为演示如何在 DynamoDB 中执行并行扫描的演示。该实现使用 Python,但是相同的逻辑可以轻松地重新实现成任何其他语言。

profile picture
专家
已回答 4 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则