我们在生产中有一个 DynamoDB 表,该表正在不断更新,我们希望将所有记录从 DynamoDB 加载到 Redshift。我们尝试使用复制命令,但由于新记录不断被插入到表中,复制命令会一直运行。我们想知道从实时 DynamoDB 加载数据到 Redshift 的最佳方式是什么。
考虑研究基于DynamoDB Streams的解决方案。Streams提供了每个DynamoDB分区上正在发生的数据平面事件的有序日志(因此每个主键的事件是绝对有序的)。您可以使用Kinesis Client Library和DynamoDB Streams Kinesis Adapter来处理流以将其转换为Redshift。DynamoDB Streams目前处于预览阶段,但应很快普遍可用。
你可以使用以下模式:DynamoDB Streams -> AWS Lambda -> Amazon Kinesis Firehose -> Amazon Redshift。来自AWS文章DynamoDB Streams Use Cases and Design Patterns的图表。请参见此处的答案,AWS DynamoDB Stream into Redshift。DynamoDB流实际上与Kinesis数据流相同,但它是由DynamoDB中的新/更改数据自动生成的。这使得应用程序在向DynamoDB表添加新数据或更改数据时可以收到通知。Kinesis Data Firehose可以自动将流输出到Redshift(以及其他目标)。AWS Lambda可以运行代码而无需提供或管理服务器。您只需要支付您消耗的计算时间 - 当您的代码未运行时不会收费。您可以为几乎任何类型的应用程序或后端服务运行代码 - 所有这些都没有管理。Lambda对于检查通过流传输的数据非常有用。例如,它可以用于操作数据格式或跳过不需要的数据。将所有内容放在一起,您可以在DynamoDB中添加/修改数据。这将导致发送包含更改信息的DynamoDB流。 AWS Lambda函数可以检查数据并操作/丢弃消息。然后,它可以将数据转发到Kinesis Data Firehose以自动将数据插入Amazon Redshift。