这段时间一直在做批量数据更新插入的工作,一开始我理所当然地使用批处理的方式处理数据。
但后来发现,批处理速度虽然相对快不少,但一旦数据中出现问题数据,我完全不知道怎么调,console只会提示批处理出错,但到底哪儿错了却一声不吭,很是可恶。
最后我的做法是先进行批处理,如果有问题数据导致批处理报错,就回滚,然后进行单记录单事务提交。好处是可以记录所有错误数据的错误信息,坏处当然就是效率太…………
我希望可以从批处理阶段,jdbc就能告诉我哪些个数据有问题,并且各自的问题是什么。
所以,想问下大家,还有更好的处理办法兼顾效率和错误提示吗?或者请分享一下,大家平时是怎么处理这样的问题的?
ps:
1. 数据本身我不可控制,难以从源头上消灭问题数据。
可以使用基于事务的批量insert,效率也会很好。我说的批量不是addBatch这些,而是先开启一个事务,然后一次insert只去插入一条,而插入很多条后去commit这个事务。为什么:默认情况下,一个insert是一个事务,每个事务都会写日志。通过减少写日志的次数,速度可以提升很多。
伪代码:
<preclass="brush:java;toolbar:true;auto-links:false;">starttransaction;foreachdata{try:insert(data)catch:printdata+"插入失败"}commit;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。