同步大数据的表

  接到一个需求,同步对方的18张表,而且还是视图。从程序端做。

首先写了另外一个jdbc的链接到人家的数据库读取视图。也就是我们程序同时连接2个不同的数据库。2个不同的jdbc.properties,2个不同的getconnection,2个不同的excuteQuery.等等。

但是光是读取一张180万数据的表,就内存溢出,结果集关闭了。存取数据的集合是JSONARRAY。于是我们跟业务联系,幸好别人只会修改2个月之前的数据,再以前的数据就会封账,即不会修改数据。还好我们能只取2个月的数据比较就行了。不过这也有十几万数据了......

我们想到了用多线程,因为他们的表没有主键ID(好坑啊!)。但是实际上测试的时候发现多线程并不能提高速度。这个问题很简单,你的瓶颈根本不在内存里的数据处理,而在于你的磁盘IO性能,所以多线程根本起不了什么作用,甚至会导致并发的IO操作而降低性能。 就好比你急着往一个U盘上拷五部电影,你五个文件都复制黏贴,五个对话框同时拷贝,说不定比你一个一个拷贝还慢。。。

于是我想到了比较结果集的方法。从jdbc底层入手。首先循环A结果集,遍历,如果B结果集包含A的对象a,A.remove(a);这是我试过效率比较高的方法。

if(!zhihua.equals(vip)){
//如果zhihua集合里面存在vip的集合,则直接过滤掉
for (Object object : vip) {
JSONObject djobject=(JSONObject)object;
zhihua.remove(djobject);
}
}

还有一种就是,A.removeAll(B).得到结果集A。这种jdbc自带的方法虽然简单,但效率不高。

if(!zhihua.equals(vip)){
//如果zhihua集合里面存在vip的集合,则直接过滤掉
zhihua.removeAll(vip);
}

于是解决同步的问题。其实这个量级我知道充其量也就是百万级的,上了百万就内存不足了。这个问题其实也是可以解决的。那是后话啦~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmlcq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值