在一个事务中 ,我传入1 万条数据用于批处理,设置 batchSize 为 100条,在最后一百条出错了,结果事务回滚,但是回滚的只是最后的一百条数据,前面的9900条已经入库,我也不知道是哪些数据出了错。假设我通过某种途径修正了1万条中错误的数据,这时我想按先前的批处理进行再一次的入库,咋办???
所以我觉得batchSize 这个变量应该由使用者自己去定义,不应该作为batch的参数传入。JFinal 的 batch 只需要负责给了多少数据就一次性commit多少数据,每一次批量提交都在一个事务中控制,这次失败了,那就把这次的数据回滚,至于批量提交多少次,那就是使用者自己控制了。 这样的话,使用者就知道哪一批次的数据错了,如果可以的话,可以开启另外的线程异步处理掉这批错误数据,当前线程接着处理下一批次的数据。
1、基于使用者清楚批量操作的数据量限制的前提下,其实使用者手动分好批次执行batch和指定batchsize参数执行木有太大区别。唯一一点就是如果指定参数程序自动分批次的话,在发生异常的时候可能需要在报告异常的时候,指明是第几个批次失败了,否则就要去check数据才能知道。
2、如果使用者不知道批量操作的数据量限制的话,batchsize参数可能会给使用者带来疑惑。
综上,带有batchsize参数有两点好处:1、省代码,不用自己写循环和其他重复代码。2、强制使用者清楚数据量是批量操作成功与否的因素之一。 当然凡事都是双刃剑,缺点可能就如楼主和上述所述。
建议,是否可以考虑加一批不带batchsize参数的重载,即默认batchsize为Integer.MAX_VALUE?其次,自动分批次如果异常能否提示批次号?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。