DynamoDB - 扫描一个7.5GB的表格

0

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

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

期待听到您的想法!

profile picture
EXPERTE
gefragt vor 6 Monaten38 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen