我們有大約100,000條記錄被插入到數據庫中。在Hibernate批量插入中這樣做會是一個好主意嗎?應該選擇批量大小的政策是什麼?Hibernate批量更新與存儲過程
否則我們應該調用一個存儲過程來批量插入?無法獲得有關從Hibernate傳遞數組對象到數據庫存儲過程的任何信息。
或者兩者的混合搭配都會加速這一過程。像批量調用Stored Proc一樣?
感謝
我們有大約100,000條記錄被插入到數據庫中。在Hibernate批量插入中這樣做會是一個好主意嗎?應該選擇批量大小的政策是什麼?Hibernate批量更新與存儲過程
否則我們應該調用一個存儲過程來批量插入?無法獲得有關從Hibernate傳遞數組對象到數據庫存儲過程的任何信息。
或者兩者的混合搭配都會加速這一過程。像批量調用Stored Proc一樣?
感謝
對於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批處理支持不夠,您應該試試本地存儲過程。
您選擇的任何方法都需要注意長時間運行的事務。長時間運行的事務持有鎖,並且撤銷/重做數據庫日誌可能會增長並使事務更慢。