【问题标题】:Batch read on DynamoDB or stream data to S3在 DynamoDB 上批量读取或将数据流式传输到 S3
【发布时间】:2016-09-10 13:39:50
【问题描述】:

我有一个 dynamodb 表,我需要每小时读取一次以在数据仓库上执行负载。我有两种选择:

  1. 创建一个按 last_update 时间戳扫描表过滤并加载到 DW 的作业。
  2. 对每个新的更新/插入使用 Kinesis + Lambda,我将记录转储到 S3,以供进一步处理。然后我创建一个将 s3 文件加载到 DW 的每小时作业。

最好的方法是什么?

【问题讨论】:

    标签: amazon-s3 amazon-dynamodb aws-lambda amazon-kinesis


    【解决方案1】:

    对于 1 号,你的方式还不错。 我需要更多规格才能改进。

    对于第 2 点,您应该使用 Kinesis Firehose 并将其配置为将数据直接保存到 S3。

    【讨论】:

      【解决方案2】:

      使用 DynamoDB 更新流是连接前端服务数据库 (DynamoDB) 和分析数据库的有效方式。它允许解耦,使系统的每个部分独立发展,而不会破坏另一部分。

      它还允许您拥有一个无服务器环境,从而减少您的操作负载和工作量。您可以使用读取更新流的单个 Lambda 函数来决定将哪些数据记录到哪个数据存储。通常人们将所有插入/更新/删除作为日志写入 S3,并将相关记录和列写入数据仓库中的各种表(例如 Redshift)。您的 Lambda 函数可以将转换后的记录放置到几个 Kinesis Firehose 中,它们会将数据可靠地移动到它们的目的地。

      【讨论】:

      • 伟大的@Guy!当 lambda 函数失败时,dynamodb 流如何处理?它会重试吗?
      • 是的,它会重试。但问题是 Lambda 为什么会失败。如果您的代码中有错误或“毒丸”(杀死您的函数的记录),它将永远失败,直到从流中删除更改(24 小时)。
      • 谢谢@Guy。另一个问题:假设我在激活(stream + lambda)之前有旧记录。是否可以重新处理?即把它放在流上,就好像它是一条新记录一样。
      • 没有。只有流被激活后的更新才会出现在那里。如果您想处理旧数据,您可以运行备份(使用 EMR 或 Scan)并处理这些记录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2021-04-09
      • 1970-01-01
      • 2018-09-07
      • 2021-09-13
      • 2018-11-19
      • 1970-01-01
      相关资源
      最近更新 更多