首頁 >資料庫 >mysql教程 >如何使用 Hibernate 高效地從 MySQL 取得 9000 萬筆記錄而不耗盡記憶體?

如何使用 Hibernate 高效地從 MySQL 取得 9000 萬筆記錄而不耗盡記憶體?

DDD
DDD原創
2024-12-05 13:00:11595瀏覽

How Can I Efficiently Fetch 90 Million Records from MySQL Using Hibernate Without Running Out of Memory?

使用Hibernate 讀取大型結果集的最佳化策略

本文解決了使用HibernateMySQL 資料庫讀取9000 萬筆記錄的挑戰,而無需使用Hibernate RAM 過載。

ScrollableResults限制

最初,使用者嘗試利用 Hibernate 的 ScrollableResults 增量地流式傳輸結果。但是,MySQL Connector/J 函式庫不提供真正的捲動功能,會將整個結果集載入到記憶體中,導致 OutOfMemoryError 異常。

setFirstResult/setMaxResults 與 ScrollableResults

作為解決方法,使用者考慮使用 setFirstResult 和 setMaxResults 迭代來取得批次結果。但是,由於為每個批次初始化新查詢的開銷,這種方法可能效率較低,特別是對於大型結果集。

使用本機SQL 最佳化批次擷取

受訪者建議的最佳解決方案是脫離MySQL J/Connector並使用批次查詢:

select * 
from person 
where id > <max_id_of_last_batch> and <other_conditions> 
order by id asc  
limit <batch_size>

此查詢根據先前確定的前一批記錄的最大ID 抓取一批記錄,並按ID 升序對它們進行排序。 batch_size 參數決定一次檢索的記錄數。這種方法可確保僅在記憶體中處理可管理數量的記錄,從而防止記憶體耗盡。

以上是如何使用 Hibernate 高效地從 MySQL 取得 9000 萬筆記錄而不耗盡記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn