當前位置:
首頁 > 最新 > JDBC大查詢,內存溢出解決方案

JDBC大查詢,內存溢出解決方案

前言

問題還是來源於實際項目。即席查詢中,一次查詢,返回大量數據會導致內存溢出問題。

問題原始方案

直接通過jdbc鏈接資料庫,通過遍歷ResultSet獲取結果。示例代碼:

問題:這樣在大查詢的情況下,會導致內存溢出。

優化方案1

減少應用伺服器內存壓力。將查詢結果存儲為hdfs文件,然後通過文件流式讀取數據。

步驟

優點:減少應用伺服器內存壓力,避免了內存溢出OOM的風險。

缺點:需要增加hdfs登錄過程(不方便對接第三方的數據源:需要處理不同安全認證登陸(ldap、kerberos等);hdfs的多結點備份,浪費很多存儲;不建議小文件存儲在hdfs中。

優化方案2

使用資料庫內置的流式查詢。示例代碼:

核心代碼分析

驅動中 api中指出,只有同時開啟ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY,Integer.MIN_VALUE 三個條件才能實現流失處理。

優點:減少系統複雜度(相比第一種優化,減少了與hdfs系統交互過程);更加通用,對接其他資料庫時,不需要關係上層系統的差異(如:集群認證方式等);流式方式是每次返回一個記錄到內存,所以佔用內存開銷比較小,並且調用後會馬上可以訪問數據集的數據。

結語

性能問題,往往可以考慮是否可以通過流式編程來優化。

動動小手指,關注一下,是給予我最大的動力。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 補愚者說 的精彩文章:

TAG:補愚者說 |