tungsten replicator 代码的修改

本文介绍TungstenReplicator在MySQL至MongoDB数据同步中的问题及改进措施,包括解决索引过长、JSON类型数据同步、字段添加等问题,并提供修改后的代码GitHub地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tungsten Replicator是一种MySQL复制引擎,支持跨数据库系统的复制,可以把mysql的数据同步到mongodb、oracle、hdfs等。
我主要用tungsten replicator同步数据到mongodb,在使用的过程中遇到一些问题,主要包括:
1、自动生成索引名称过长。
当mysql中有update操作的时候,会根据mysql中的表结构在mongodb中建索引,索引名称为key字段名拼接在一起。如果mysql中没有key,且字段较多,可能会造成索引名称过长,超过mongodb的索引名称长度限制。
2、不支持mysql5.7中新增的json格式。
mysql5.7中的json格式的数据是按照一定的编码方式编码后存储的,在binlog中是看不出数据的样子的,tungsten replicator在解析binlog时遇到json格式的数据会报错。
3、不支持在同步到mongodb的表上添加新的字段。
比如mysql中有两个字段,同步到mongodb时也会有三个字段(包括mongodb的_id字段),mongodb比较自由,没有固定的表结构,如果我想在这个同步表上添加其他字段,在mysql上做update操作后会直接覆盖掉同步的数据,新增加的字段就没了。这样不利于利用原有的数据表。
4、不支持mongodb权限认证。
5、使用的mongodb   driver jar包的版本过低,部分功能不支持。

因此我和我们组的一个实习生对tungsten replicator代码进行了一些修改:
1、修改索引名称生成规则,用字段名称的首字母拼接起来组成索引名,大大缩短了索引的长度,基本上就不会达到mongodb的索引名称长度限制。
2、阅读mysql5.7的源代码,了解json格式数据的编码方式,然后解码成字符串。同步到mongodb后也是字符串。
3、修改写入mongodb时的代码,同步时只会覆盖mysql中有的字段,新增的字段保留。
4、增加了mongodb权限认证功能。
5、使用了较新的3.0驱动包,重新改写了mongodb客户端的代码。

经过测试,基本上没有什么问题,如果需要使用这些修改的功能,可以到github上clone后自己编译使用,地址:https://github.com/WangXiangUSTC/tungsten-replicator.git,编译需要下载gson-2.6.2.jar把这个jar拷到tungsten-replicator/replicator/lib目录下再编译,编译方法和要求参考readme。


Tungsten Replicator架构是一种用于数据复制和同步的开源工具。它是由一组组件组成,用于从一个数据库到另一个数据库的数据复制。 Tungsten Replicator的主要组件包括: 1. 提供数据变更的源数据库:源数据库可以是任何支持MySQL协议的数据库,如MySQL、MariaDB等。 2. Tungsten Replicator核心引擎:该引擎是整个架构的核心组件,负责解析源数据库中的日志,以实时方式将数据变更(如插入、更新、删除)传递给目标数据库。 3. 目标数据库:目标数据库也可以是任何支持MySQL协议的数据库。当Tungsten Replicator接收到数据变更时,它将将其应用于目标数据库。 4. 事务处理和数据过滤:Tungsten Replicator提供了事务处理和数据过滤功能。可以配置仅复制指定的表或列,以减少数据复制的范围和复杂性。 5. 故障处理和高可用性:Tungsten Replicator具有故障处理和高可用性功能。如果源数据库或目标数据库发生故障,它能够自动切换到备用节点,保持数据的连续性。 6. 监控和报警:Tungsten Replicator提供了监控和报警功能,可以实时监控复制过程中的性能和状态,并在发生异常情况时发送警报。 Tungsten Replicator的架构设计旨在提供高性能和可靠性的数据复制和同步解决方案。它提供了广泛的配置选项和扩展性,适用于各种数据复制需求。无论是用于数据备份、数据迁移还是实时数据同步,Tungsten Replicator都是一个功能强大且可靠的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值