2014-11-06 65 views
1

我們有大約100,000條記錄被插入到數據庫中。在Hibernate批量插入中這樣做會是一個好主意嗎?應該選擇批量大小的政策是什麼?Hibernate批量更新與存儲過程

否則我們應該調用一個存儲過程來批量插入?無法獲得有關從Hibernate傳遞數組對象到數據庫存儲過程的任何信息。

或者兩者的混合搭配都會加速這一過程。像批量調用Stored Proc一樣?

感謝

回答

2

對於efficient batch inserts請確保您啓用以下屬性:

<property name="hibernate.order_updates" value="true"/> 
<property name="hibernate.order_inserts" value="true"/> 
<property name="hibernate.jdbc.batch_versioned_data" value="true"/> 
<property name="hibernate.jdbc.batch_size" value="50"/> 

另外,還要確保你don't use IDENTITY for your entity @Id column。 IDENTITY生成器禁用批處理。

我建議你嘗試enhanced generators,尤其是pooled-lo optimizer,以防你使用支持序列的數據庫(Oracle,PostgreSQL,SQL Server 2008)。

您可以從Hibernate中調用存儲過程,但對於選擇數據比對批量插入更有用。

如果建議的Hibernate批處理支持不夠,您應該試試本地存儲過程。

您選擇的任何方法都需要注意長時間運行的事務。長時間運行的事務持有鎖,並且撤銷/重做數據庫日誌可能會增長並使事務更慢。