最近利用一些时间对oracle数据库实时同步工具进行了一些调查分析。 主要关注linkedin的databus和阿里的yugong两个中间件。 其中,databus需要在同步对象的各表中添加额外的列和触发器来实现,方案比较重。 本文重点分析蚂蚁玉公实现方案,并提出分析调查报告。
1 .玉公实时同步原理
使用oracle的materializedviewlog功能,原始表中的数据库必须授予用户创建和删除materializedviewlog的权限,就像内部触发器一样。 有关物化视图日志的详细说明,请参阅以下文章:
2 .性能测试
a .在测试环境1的原始表(TEST_SOURCE )中生成新的300万数据
b .为了不影响开发环境的数据,修改yugong代码并将目标表更改为TEST_SOURCE_BAK
启动yugong服务,开始数据同步
d .经过1.5小时后,同步所有增量数据
3 .数据延迟测试
a .分别手动更改删除原表数据,10秒内实现数据同步
b .在目标库中添加列。 类型为时间类型,默认值为当前时间
c .使用脚本在原始库中重复生成一系列数据(50条为一批) ) ) ) ) )。
d .所有数据的延迟时间在30秒以内
4 .数据完整性测试
a .手动随机提取数据,比较同一记录各列的值,数据匹配
使用jdbc提取特定的记录集合,使用md5函数时,md5的结果一致
5 .其他测试用例
a .在原始表中添加字段,不添加目标表,数据正常同步
b .先向目标表中添加字段,不向原始表中添加字段,数据同步正常
c .必须同时在原始表和目标表中添加字段,重新启动服务,然后同步数据
d .无主键测试,yugong不支持无主键同步
e .主键是多列测试,可以正常同步
f.yugong服务连续运行了72个小时,中间可能发生过同步中断,但原因尚不清楚
g .在事务中回滚实例化视图日志时,将同步回滚
h .目标表删除记录,原始表更新此记录,并将此记录重新同步到目标表
6 .玉公分析
a .代码简洁,分为提取器、转换器、应用程序和更新到目标库三个部分
b .只有一项服务,没有其他第三方的依赖
c .原理简单,可以按照我们的意图更改代码