我正在尝试制作一个从 MySQL 到 redshift 的复制服务器,为此,我正在解析 MySQL binlog。对于初始复制,我将 mysql 表转储,将其转换为 CSV 文件并将其上传到 S3,然后使用 redshift copy 命令。为此,性能是有效的。
在初始复制之后,为了在我读取 binlog 时进行连续同步,插入和更新必须按顺序运行,这非常慢。
有什么可以提高性能的吗?
我能想到的一种可能的解决方案是将语句包装在事务中,然后一次发送事务,以避免多次网络调用。但这并不能解决 redshift 中单个 update 和 insert 语句运行速度很慢的问题。单个更新语句需要 6 秒。了解 redshift 的局限性(它是一个列式数据库,单行插入会很慢)如何解决这些局限性?
编辑 1:关于 DMS:我想使用 redshift 作为仓储解决方案,它只是连续复制我们的 MYSQL,我不想对数据进行非规范化,因为我在 mysql 中有 170 多个表。在持续复制期间,DMS 在一天内多次显示许多错误,并在一两天后完全失败,并且很难破译 DMS 错误日志。此外,当我删除并重新加载表时,它会删除 redshift 上的现有表并创建新表,然后开始插入数据,这在我的情况下会导致停机。我想要的是创建一个新表,然后用新表切换旧表并删除旧表