批量保存batchSave方法中的batchSize应该设成多少才是合理的?

用了好久的batchSave和batchUpdate,一直都没太在意这个batchSize

都是根据记录条数的上限预估一个数值

比如某个批量操作,最多大概能有几十条数据,那就设成100

如果有好几百条,那就设成1000

由于现在还没上线,数据量比较少,更新数据时维护索引消耗的时间也很少

不知道以后数据量变大时有没有隐患

或者有更科学的设置方法,请 @JFinal 指点

评论区

JFinal

2017-09-27 11:01

设置成多少合适取决于数据库类型,例如 mysql 在数据量到达 5 千还是 5 万后会自动提交一次,即便你设置成 10 万都是没有意义的

建议的做法是,根据数据量选择一个小于数据库支持的 size。这个 batchSize 本质是为了让开发者选一个小于数据库支持的 size 值,好在碰到异常时可以针对本次提交的数据进行回滚,当然,你得开启事务才支持回滚,开启事务的方式与其它数据库操作 API 是一样的方法

此外,再延升一下,数据库支持的 batchSize 可能与配置有关,而这个配置可能是缓冲区的大小,而不是一个 int 型数值,所以可能与你每条数据中包含的字段内容长度有关,这个没有深入研究过,有兴趣、有时间的朋友可以翻看一下 mysql 文档

我个人一般用 1000 2000 顶多 3000 的 batchSize,避免了自动提交,可以回滚事务

netwild

2017-09-28 15:14

@JFinal 明白了,原来这个值决定了事务发生回滚时的代价

绝对零度

2020-05-21 16:53

请问这个batchSave中如果有一条数据没有提交成功,其他数据还会继续提交吗

热门反馈

扫码入社