最近工作中,需要设计数据同步方案,调研了很多种方法。比如 SQL Server 事务复制、fine data link、SQL Server 第三方同步软件、pentaho kettle、SQL Server SSIS 等等。数据同步需要考虑以下几点:
-
尽量不动生产数据库:这一点 SQL Server 事务复制淘汰。
-
实时与定时:实时同步 SQL Server 原生功能最可靠;而且涉及到实时同步需要改动原生数据库开启CDC数据捕获,其余方案都需要 kafka 等消息队列软件与第三方软件结合。
-
全量与增量:数据量在一万以下全量同步;在一万以上,需要考虑增量同步,毕竟单表有的是10G大小。增量同步又要考虑来源表是否是增删改,还是只增;以及目标表是否有增删改问题。
最终选择基于 pentaho data integration(kettle) 开源软件方案,能够较为完美实现数据同步方案的要求。
记录其中使用过程中的问题。
峰回路转,单个表输入输出原来这么强大
一开始我以为同步需要分页,原来我以为kettle 中“提交记录数量”为2000,就是一次提交量。害得我花了很长时间考虑如何分页、分页后的数据对比、增量同步。看到别的文章才知道 “提交记录数量”是在一次事务中提交的数量。我自己设计的分页输入输出,20分钟才能完成,今天早上测试了一个60多万条数据的单表,大小为600mb,不到一分钟就完成了。
分页问题让我调了一晚上
我在分页查找数据的时候,使用 order by create_date
,不知道为啥结果复制老是在500万条数据中差3条数据。终于在尝试多次后使用 id 排序,才能一条不差的完成。
kettle 软件还是非常强大的,而且基于 Java 开发很容易配置、调试,而且跨平台。