oracle mysql结构同步_JDBC造的Mysql To Oracle数据表同步工具

源数据表:Mysql,120W数据量,42字段,bigint,datetime,varchar三种类型数据,最长字段为200 varchar

目标:Oracle 11G,表结构一致。

基于http://www.linuxidc.com/Linux/2012-06/61667.htm文章提供的源码,加入分页读取源数据和增量同步。

直接使用源码运行,由于直接读取源数据所有数据再写入目标表,所以根据数据量不同需要的内存也不同。据实测:120W数据至少要1500M以上的内存,开七线程需要约6分钟(由于数据ID的特殊性,开的线程数要为奇数,否则每线程分配的数据量差距极大)。

该程序合适做insert的同步,数据只进不出不改不删。

在我的需求中,数据还要每间隔一段时间做增量同步,结合需求及发现的问题,对程序做如下改进和功能升级:

1、对读取源数据实现分页同步,可以大大减少内存花销

2、增加数据增量同步功能,在完成第一次全量同步之后,之后就会采用增量同步

在以程序改进过程总结出一点平时看似不痛不痒,但在某些环境会变得极为重要的习惯。

在分页读取源数据时使用的ResultSet对象,在每个循环用完之后不做处理,直接进入下一轮循环再次使用,这样貌似程序没什么问题,也可以正常运行。但对于实际环境中,每次使用ResultSet对象所占用的资源并没有回收,直到最后内存不足,如果数据量不大,根据不会突显这个问题到底有多严重,在我测试发现如果不在使用ResultSet之后关闭,内存会一直飙升到最大值,然后溢出,如果每次把它关闭,内存会稳定在一个值不会飙升,这个值就看你的分页大小而定。

最后的结果:改进前,同步120W数据,开七线程需要1500M内存,6分钟。采用分页和资源优化之后,也是七线程同步120W数据,开销内存150M和72秒。在我的实际情况中,这结果让我很惊讶。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值