论坛首页 Java企业应用论坛

java实现高性能的数据同步

浏览 17421 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-11-26  
首先, 如果楼主真的是转载别人的文章, 需要加引说原文. 这种直接抄袭的做法, 我们的robbin哥是最鄙视的

yizhilong28 写道
1) CLOB/BLOB字段
2) 一次性查询过多数据, 遇到 "ORA-1013", "ORA-1555",或堆栈溢出
3) insert时产生主键冲突

做过一同步的项目,1,2,3都遇到了,用java基本没解,头疼



这种数据库的手动复制用在一次性工作善可, 如果是一个长期使用的tools或是服务, 是很成问题的.

我所做的系统遇到了很多的问题, 主要有

1) CLOB/BLOB字段, 只比较长度, 不比较实际内容, 并且用ojdbc6.jar(最新oracle驱动fix了不少bug, 并且支持JDBC4标准, 所以用CLOB/ BLOG字段的支持更好

2) 一次性查询过多数据, 遇到 "ORA-1013", "ORA-1555": 需要对查询进行分段(分段逻辑需要针对不同的数据库定制, 一般情况是对类似lastmodifiedtime字段, 以时间分段

3) insert产生冲突, 或是其他的异常, 需要有非常好的异常处理框架, 因为JDBC的异常只有SQLException, 不能区分是连接异常, 表级异常, 还是行级异常. 并且要做好出异常的尝试机制. 只有这样才能避免因为中间异常而出现的中途退出和进入死循环.  要知道真正的产品上一次复制可能是好几天, 没有人能一直盯着看. 程序必须有很好的健壮性.

4) 对第三的补充, 尽管JDBC4标准已经对SQLException做了很好的改进, 但是各大数据库产商支持太差.
0 请登录后投票
   发表时间:2010-11-26  
线程处理上并不是很好吧,比如while (currentSynCount.get() < totalNum);你这是让主线程运行空语句,太浪费了
0 请登录后投票
   发表时间:2010-11-26  
一次1000条,还多线程,IO怎么解决
频繁的少量写入,不如一次大批量的写入.
0 请登录后投票
   发表时间:2010-11-26  
jiayj198609 写道
yjwxfpl 写道
PreparedStatement targetPstmt = targetConn.prepareStatement("INSERT INTO " + targetTBName+" VALUES (?,?,?,?,?)");

你同步的表结构都只有五个字段  ,targetPstmt.setString()  类型全都是String?



那具体的表结构当然是看你具体的操作了;我的表只有五个字段;当然就set五个了;难道还要set6个?



用户set和用SQL拼接是有性能的差别的!既然是考虑大数据的迁移,所以对每条语句的性能都是要考虑到滴。
0 请登录后投票
   发表时间:2010-11-26   最后修改:2010-11-26
迁移数据的话,PB也有个可以做不同数据库的对接(数据管道)。迁移不是很快,但操作很简单就是了。
0 请登录后投票
   发表时间:2010-11-26  
你是在哪家银行哦,有点搞扯,居然允许你连接它的核心数据库???你要是发一条Update语句呢?我做银行的项目都N久了,做过建行、商业银行的项目,谁敢把核心数据给你直连???顶多只能给你备过份出来,你再导入还差不多
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics