2013-04-09 76 views
0

我有5000条记录要保存。从数据库的角度来看,最好的办法是在hibernate中保存单个记录(保存(记录)5000次)还是saveAll(5000条记录的列表)...?由于这种场景经常会提示我最好的一个..保存大量记录进入休眠状态的最佳方法

回答

1

在Hibernate中使用批量插入功能。

当您从其他系统批量导入数据时,批插入是hibernate的一个强大功能,特别有用。如果您不使用hibernate的批处理功能,那么在插入多条记录时,应用程序的性能可能会急剧下降。

下面是一个简单comparison on normal save and Batch insert.

而且还official docs.

1

保存5000条记录在一个时间可能会耗尽内存,并得到OutOfMemoryException因为5000实例可能会占用相当大的内存。

一次保存一条记录意味着您不使用JDBC的批处理功能,可以更有效地插入记录。

因此,要达到最佳性能,您应该通过将hibernate.jdbc.batch_size设置为某个非零值来告诉hibernate使用JDBC的批处理功能。一次保存的记录数量应该等于hibernate.jdbc.batch_size的值。

另外,您应该清除会话以释放内存以防止每批次结束时的内存耗尽。您也可以禁用二级缓存以减少不必要的开销。

参考: Hibernate batch size confusion