高效地流式處理大型MySQL 結果
在開發Spring 應用程式的背景下,從巨大的MySQL 表中檢索資料可能會帶來巨大的挑戰,可能會帶來巨大的挑戰。導致 OutOfMemoryExceptions。這是因為 MySQL JDBC 驅動程式的預設行為是將整個結果集載入到記憶體中。
設定取得大小:一個不足的措施
緩解此問題,開發人員經常使用statement.setFetchSize(Integer.MIN_VALUE)方法來設定取得大小。然而,僅此並不是一個全面的解決方案。正如 Statement#setFetchSize() 的文檔中所述,取得大小僅向驅動程式提供提示,該提示可能會也可能不會被遵守。
重訪 MySQL JDBC 文件
深入研究 MySQL JDBC 驅動程式文件揭示了一種更細緻的流式處理大型結果的方法。要啟用串流傳輸,必須建立一條語句,如下所示:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
串流的注意事項
實作此方法有一些注意事項:
重新考慮記憶體分配
如果設定擷取大小並調整語句創建,則不需要解決OutOfMemoryError,根本原因可能在於Java記憶體中的資料儲存方式。不要快取整個結果集,而是考慮在它可用時立即對其進行處理。這可能需要大量的程式碼修改,可能涉及完全重寫。
以上是如何在 Spring 中有效地傳輸大型 MySQL 結果集以避免 OutOfMemoryErrors?的詳細內容。更多資訊請關注PHP中文網其他相關文章!