我需要使用Java檢索和處理來自Db2數據庫的大約200萬條記錄。我們正在將表格從一個數據庫遷移到另一個數據庫,所以我試圖在兩個表格之間做一個差異來檢查數據是否有差異。如何高效地使用Java從DB2數據庫檢索200萬條記錄?
目前我正在做一個正常的查詢,並獲取數據到結果集和使用HashMap的處理。但它永遠需要處理。我確實嘗試將fetchsize設置爲相當的值(200),但這也沒有幫助。
是否有任何其他更好的方式來檢索數據,如獲取塊和處理它?
我需要使用Java檢索和處理來自Db2數據庫的大約200萬條記錄。我們正在將表格從一個數據庫遷移到另一個數據庫,所以我試圖在兩個表格之間做一個差異來檢查數據是否有差異。如何高效地使用Java從DB2數據庫檢索200萬條記錄?
目前我正在做一個正常的查詢,並獲取數據到結果集和使用HashMap的處理。但它永遠需要處理。我確實嘗試將fetchsize設置爲相當的值(200),但這也沒有幫助。
是否有任何其他更好的方式來檢索數據,如獲取塊和處理它?
完成「檢查數據是否存在差異」目標的一種簡單方法是以相同格式從兩個表中導出數據,並使用您最喜歡的文件DIFF程序。
在Windows環境中,我通常使用Notepad ++或Windiff來完成該操作。
如果你不能使用該策略,那麼在數據庫引擎中比較它們將是第二選擇。在新數據庫中創建表的副本,然後編寫一個簡單的SQL腳本來爲您搜索DIFF。我喜歡用一個完整的外連接來完成這個工作,返回一個或另一個邊爲空的行。從舊的數據庫
select a.*, b.*
from a
full outer join b
on a.key1 = b.key1
and a.otherkeys = b.otherkeys
where a.key1 is null
or b.key1 is null
導出功能/批(JAXB) - >創建一個XML文件(S) - 從XML(S)> 導入功能/批(休眠)到新的數據庫
是什麼你的查詢看起來像?是的,你大概可以並行化(例如[IBM PureData](http://www-01.ibm.com/software/data/puredata/)或[Apache Cassandra](http://cassandra.apache.org/) )或[Apache Hadoop](http://hadoop.apache.org/))。 –
我正在做一個「select *」加入它。我在執行結果集之前和之後添加了時間戳日誌。正如我所看到的,它需要3秒才能將數據導入結果集。但是我將每行的每列值附加到並將其作爲插入到散列映射中的鍵。我正在檢查sourcekey的哈希映射,反之亦然,如果找到匹配,則刪除密鑰。在那裏,我將結束與差異的數據。它可以很好地處理500K條記錄。 – vthallam
你知道你的瓶頸在哪裏嗎?你有沒有介紹你的程序執行?一般來說,處理200萬條記錄最有效的方法是**不檢索它們,而是在數據庫中處理它們,例如,通過設置兩個數據庫之間的聯合。 – mustaccio