【发布时间】:2015-02-17 02:26:57
【问题描述】:
我们计划将我们的数据仓库解决方案转移到 amazon-redshift,我们需要设置从 mysql 到 redshift 的增量管道,该管道还可以处理更新,最有效的方法是什么?
【问题讨论】:
标签: mysql amazon-redshift
我们计划将我们的数据仓库解决方案转移到 amazon-redshift,我们需要设置从 mysql 到 redshift 的增量管道,该管道还可以处理更新,最有效的方法是什么?
【问题讨论】:
标签: mysql amazon-redshift
对于从 MySQL 到 RedShift 的数据同步,您可以尝试使用 AWS Data Pipeline。
【讨论】:
您可以使用一些现有的市场解决方案,例如http://www.bryte.com.au/solutions/amazon-redshift-integration/。否则,您将需要实施触发器和 AWS Data Pipeline。
【讨论】:
选项 1:周期性背景 从 MySQL 表中读取并写入 Redshift。在这里,您将在定期读取进行时在 MySQL DB 上创建峰值负载。届时,其他在线用户的 MySQL DB 会变慢。
选项 2:使用选项 1 但更好的方法,修改 MySQL Schema Tables 以获得额外的 Flags 和 Columns,并让多线程后台程序以更有效的方式从 MySQL Tables 读取 MySQL Tables。
选项3:成本有效的方式,使用S3作为暂存区,修改写入MySQL的程序,让该程序也写入S3位置。您可以在后台运行自定义 java 程序,该程序会定期从 S3 同步到 Redshift。 选择 Data Pipeline 将是一个代价高昂的选择,而且 MySQL 数据库的负载会激增。
选项 4:Attunity Cloud Beam
选项 5:AWS 数据管道
选项 6:AWS lambda 函数
【讨论】:
我建议让事情尽可能简单。如果您的 MySQL 数据库的大小很小,那么您可以运行mysqldump,将每个表的转储加载到临时表,然后对最终表执行 INSERT/UPDATE/DELETE 过程。如果您的 MySQL 数据库对于常规的完整转储来说太大了,那么您需要选择性地提取更改的数据。
我们混合使用这两种方法(来自 SQL Server):选择性提取仅追加的大型表和更新数据的较小表的完整转储。我们每小时执行一次,每天能够处理数百 GB 而不会出现问题。
或者,您可以尝试一些商业 ETL 工具,它们声称可以将您的数据库与 Redshift“同步”(从 Informatica Cloud 和 Attunity Cloudbeam 开始)。我们发现这些工具无法支持我们在 live 和 Redshift 之间需要的一些转换。
【讨论】:
您可以使用以下解决方案之一:
【讨论】:
您可以为此使用 AWS Data Pipeline 或使用 ironBeast。一项服务,可帮助您将数据传输到 Redshift 并在数据进入内部后对其进行维护(设置到期、清理、修复 stl_load_errors 等)
http://www.ironsrc.com/ironbeast
披露:我正在领导一个开发此解决方案的团队。
【讨论】: