1.batch的性能优化是不是这么理解,做batch我想达到的效果是这样的
一般我们去做Model save,如果我连续做3次save会这样一个执行顺序
db open
do save1
db close
db open
do save2
db close
db open
do save3
db close
这样可以看到是db做了很多次链接关闭的操作,非常浪费性能我们其实需要的是这样
db open
do save1
do save2
do save3
do close
这样减少了2次db打开关闭的操作,batch是不是就是为了做这个优化而存在的?
2.在做batch的save的时候我传一个list<model>可以保存成功但是list的中的model不会带着自增id下来,model.save是可以带着主键id的
这样就导致了一个问题,如果我下面要继续根据这个model做log的操作,log记录依赖我model的id batch就做不到了,因为batch后我不知道插入成功的model id是多少,这个怎么办?
项目:JFinal
batch 操作提升性能主要在下面几个方面,第一是客户端每次发送给数据库的数据量(sql与参数)更多,而不是以往的甚至一条一条数据发送并处理。
第二是 batch 通常是使用一条 sql 去应用于本次提交的所有数据,所以对于 sql 的解析操作只有一次,当然,这个在 prepared statment 时也会是相同 sql 共享一次解析,但总有一个 sql 解析结果的获取动作
第三是数据库内部对 batch 操作有针对性的优化,相对于单条数据操作提升处理吞吐量
第二个问题:batch 操作不支持返回 id,这个是底层 jdbc 决定的,可以尝试去 jdbc 的 api 找找是否有现成的 api 支持,记得搞定后回来分享