在尝试了所有可能的解决方案之后,我终于找到了一种在5秒内插入100,000行的解决方案!
我尝试过的事情:
1)使用AtomicInteger用自己生成的ID替换了hibernate/数据库的AUTOINCREMENT / GENERATED ID
2)以batch_size = 50启用batch_inserts
3)在每“ batch_size”个persist()调用之后刷新缓存
4)多线程(没有尝试过这个)
最后,有效的方法是使用 本机多插入查询, 并在一个sql插入查询中插入1000行,而不是在每个实体上使用 persist()
。为了插入100,000个实体,我创建了这样的本机查询
"INSERT into MyTable VALUES(x,x,x),(x,x,x).......(x,x,x)"[在一个sql插入查询中插入1000行]
现在,插入100,000条记录大约需要3秒钟!因此,瓶颈是orm本身!对于批量插入,似乎唯一起作用的是本机插入查询!



