开发者社区> 问答> 正文

Db.batch(....) 中的参数 batchSize 有些不利于事务控制

在一个事务中 ,我传入1 万条数据用于批处理,设置 batchSize 为 100条,在最后一百条出错了,结果事务回滚,但是回滚的只是最后的一百条数据,前面的9900条已经入库,我也不知道是哪些数据出了错。假设我通过某种途径修正了1万条中错误的数据,这时我想按先前的批处理进行再一次的入库,咋办???

所以我觉得batchSize 这个变量应该由使用者自己去定义,不应该作为batch的参数传入。JFinal 的 batch 只需要负责给了多少数据就一次性commit多少数据,每一次批量提交都在一个事务中控制,这次失败了,那就把这次的数据回滚,至于批量提交多少次,那就是使用者自己控制了。 这样的话,使用者就知道哪一批次的数据错了,如果可以的话,可以开启另外的线程异步处理掉这批错误数据,当前线程接着处理下一批次的数据。

展开
收起
小旋风柴进 2016-06-08 15:36:59 3081 0
1 条回答
写回答
取消 提交回答
  • 1、基于使用者清楚批量操作的数据量限制的前提下,其实使用者手动分好批次执行batch和指定batchsize参数执行木有太大区别。唯一一点就是如果指定参数程序自动分批次的话,在发生异常的时候可能需要在报告异常的时候,指明是第几个批次失败了,否则就要去check数据才能知道。

    2、如果使用者不知道批量操作的数据量限制的话,batchsize参数可能会给使用者带来疑惑。

    综上,带有batchsize参数有两点好处:1、省代码,不用自己写循环和其他重复代码。2、强制使用者清楚数据量是批量操作成功与否的因素之一。 当然凡事都是双刃剑,缺点可能就如楼主和上述所述。

    建议,是否可以考虑加一批不带batchsize参数的重载,即默认batchsize为Integer.MAX_VALUE?其次,自动分批次如果异常能否提示批次号?

    2019-07-17 19:32:05
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载