2014-06-24 63 views
1

我需要使用Java檢索和處理來自Db2數據庫的大約200萬條記錄。我們正在將表格從一個數據庫遷移到另一個數據庫,所以我試圖在兩個表格之間做一個差異來檢查數據是否有差異。如何高效地使用Java從DB2數據庫檢索200萬條記錄?

目前我正在做一個正常的查詢,並獲取數據到結果集和使用HashMap的處理。但它永遠需要處理。我確實嘗試將fetchsize設置爲相當的值(200),但這也沒有幫助。

是否有任何其他更好的方式來檢索數據,如獲取塊和處理它?

+0

是什麼你的查詢看起來像?是的,你大概可以並行化(例如[IBM PureData](http://www-01.ibm.com/software/data/puredata/)或[Apache Cassandra](http://cassandra.apache.org/) )或[Apache Hadoop](http://hadoop.apache.org/))。 –

+0

我正在做一個「select *」加入它。我在執行結果集之前和之後添加了時間戳日誌。正如我所看到的,它需要3秒才能將數據導入結果集。但是我將每行的每列值附加到並將其作爲插入到散列映射中的鍵。我正在檢查sourcekey的哈希映射,反之亦然,如果找到匹配,則刪除密鑰。在那裏,我將結束與差異的數據。它可以很好地處理500K條記錄。 – vthallam

+1

你知道你的瓶頸在哪裏嗎?你有沒有介紹你的程序執行?一般來說,處理200萬條記錄最有效的方法是**不檢索它們,而是在數據庫中處理它們,例如,通過設置兩個數據庫之間的聯合。 – mustaccio

回答

0

完成「檢查數據是否存在差異」目標的一種簡單方法是以相同格式從兩個表中導出數據,並使用您最喜歡的文件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 
0

導出功能/批(JAXB) - >創建一個XML文件(S) - 從XML(S)> 導入功能/批(休眠)到新的數據庫

相關問題