2013-04-09 84 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