Aws lambda ETL+;使用红移和Dynamodb在之间同步数据
我需要将来自DynamoDB的数据聚合到AWS Redshift,并且我需要准确和同步。对于ETL,我计划使用DynamoDB流、Lambda变换、Kinesis Firehorse,最后是红移 更新数据的过程如何?我发现它只是为ETL做了微调。哪一个应该是保持两者(迪纳摩和红移)同步的最佳选择 以下是我目前的选择:Aws lambda ETL+;使用红移和Dynamodb在之间同步数据,aws-lambda,amazon-dynamodb,amazon-redshift,etl,amazon-kinesis-firehose,Aws Lambda,Amazon Dynamodb,Amazon Redshift,Etl,Amazon Kinesis Firehose,我需要将来自DynamoDB的数据聚合到AWS Redshift,并且我需要准确和同步。对于ETL,我计划使用DynamoDB流、Lambda变换、Kinesis Firehorse,最后是红移 更新数据的过程如何?我发现它只是为ETL做了微调。哪一个应该是保持两者(迪纳摩和红移)同步的最佳选择 以下是我目前的选择: 直接从Lambda到Redshift触发“UPDATE”命令(阻塞) 汇总所有更新/删除记录,并“以某种方式”每小时对其进行处理 有这方面的经验吗?也许红移不是最好的解决方案?我需
有这方面的经验吗?也许红移不是最好的解决方案?我需要提取聚合数据,以便在2 TB的数据上报告/仪表板。红移复制命令支持使用DyanmoDB表作为数据源。在您的情况下,这可能是也可能不是一个可行的解决方案,因为此过程存在一些限制。数据类型和表命名差异可能会使您感到困惑。另外,对于增量更新来说,这不是一个很好的选择,但是如果数据量很小,并且您可以设计更新SQL,那么可以这样做 查看DynamoDB流的另一条路线。这将通过运动传递数据更新,并可用于以合理的速率更新红移。这有助于保持这些数据库之间的数据同步。这可能会使数据尽快用于红移 请记住,您不会让红移以时刻为基础进行匹配。这就是你所说的“同步”吗?这些是非常不同的数据库,具有非常不同的用例和体系结构来支持这些用例。红移在大块数据中工作,其变化速度比DynamoDB中通常发生的要慢。在“块”中会有红移更新,其发生频率比在DynamoDB上更为罕见。我已经制作了一些系统,将更新时间间隔缩短到5分钟,但当试图保持仓库同步时,10-15分钟的更新时间间隔是大多数更新时间的结束时间
另一个选项是不经常(每小时?)更新红移,并使用联合查询将“最近”的数据与存储在红移中的“旧数据”组合起来。这是一个更复杂的解决方案,可能意味着对您的数据模型进行更改以支持但可行。因此,只有当您确实需要查询最新的数据以及较旧和较大的数据时,才可以转到这里。红移复制命令支持使用DyanmoDB表作为数据源。在您的情况下,这可能是也可能不是一个可行的解决方案,因为此过程存在一些限制。数据类型和表命名差异可能会使您感到困惑。另外,对于增量更新来说,这不是一个很好的选择,但是如果数据量很小,并且您可以设计更新SQL,那么可以这样做 查看DynamoDB流的另一条路线。这将通过运动传递数据更新,并可用于以合理的速率更新红移。这有助于保持这些数据库之间的数据同步。这可能会使数据尽快用于红移 请记住,您不会让红移以时刻为基础进行匹配。这就是你所说的“同步”吗?这些是非常不同的数据库,具有非常不同的用例和体系结构来支持这些用例。红移在大块数据中工作,其变化速度比DynamoDB中通常发生的要慢。在“块”中会有红移更新,其发生频率比在DynamoDB上更为罕见。我已经制作了一些系统,将更新时间间隔缩短到5分钟,但当试图保持仓库同步时,10-15分钟的更新时间间隔是大多数更新时间的结束时间
另一个选项是不经常(每小时?)更新红移,并使用联合查询将“最近”的数据与存储在红移中的“旧数据”组合起来。这是一个更复杂的解决方案,可能意味着对您的数据模型进行更改以支持但可行。因此,只有当您真的需要查询最新的数据以及更旧、更大的数据时,才转到这里。最合适的答案是使用带有UPSERT操作的暂存表(或对其进行红移解释) 我发现答案在我的用例中是有效的:
- 在不造成阻塞的情况下,尽可能使红移保持最新
- 能够使用复杂的DynamoDB模式,因此它们不能直接用作源,必须转换数据以适应Redshift DDL
关于UPSERT操作的更多细节,我发现非常有用。最合适的答案是使用带有UPSERT操作的暂存表(或对其进行红移解释) 我发现答案在我的用例中是有效的:
- 在不造成阻塞的情况下,尽可能使红移保持最新
- 能够使用复杂的DynamoDB模式,因此它们不能直接用作源,必须转换数据以适应Redshift DDL