锁定老帖子 主题:java实现高性能的数据同步
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间: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做了很好的改进, 但是各大数据库产商支持太差. |
|
返回顶楼 | |
发表时间:2010-11-26
线程处理上并不是很好吧,比如while (currentSynCount.get() < totalNum);你这是让主线程运行空语句,太浪费了
|
|
返回顶楼 | |
发表时间:2010-11-26
一次1000条,还多线程,IO怎么解决
频繁的少量写入,不如一次大批量的写入. |
|
返回顶楼 | |
发表时间:2010-11-26
jiayj198609 写道 yjwxfpl 写道 PreparedStatement targetPstmt = targetConn.prepareStatement("INSERT INTO " + targetTBName+" VALUES (?,?,?,?,?)");
你同步的表结构都只有五个字段 ,targetPstmt.setString() 类型全都是String? 那具体的表结构当然是看你具体的操作了;我的表只有五个字段;当然就set五个了;难道还要set6个? 用户set和用SQL拼接是有性能的差别的!既然是考虑大数据的迁移,所以对每条语句的性能都是要考虑到滴。 |
|
返回顶楼 | |
发表时间:2010-11-26
最后修改:2010-11-26
迁移数据的话,PB也有个可以做不同数据库的对接(数据管道)。迁移不是很快,但操作很简单就是了。
|
|
返回顶楼 | |
发表时间:2010-11-26
你是在哪家银行哦,有点搞扯,居然允许你连接它的核心数据库???你要是发一条Update语句呢?我做银行的项目都N久了,做过建行、商业银行的项目,谁敢把核心数据给你直连???顶多只能给你备过份出来,你再导入还差不多
|
|
返回顶楼 | |