2012-05-30 71 views
1

我有一些數據要從多個sql server數據庫(如200)中讀取。在這些數據庫的每個數據庫中都會有10個表格,我需要從中讀取數據,我怎樣才能以最好的方式使用java來完成這項工作?從java連接到多個sql server數據庫

在此先感謝

+0

聽起來像Hadoop的一個情況? – ControlAltDel

+0

您最關心的是什麼?速度?記憶?還要別的嗎? – ControlAltDel

+0

它需要相當的速度,這將是一個每晚2-3小時的完成導入過程,並且還有其他4個應用程序可以從每晚導入大小爲100的Mbs數據到我們的應用程序中。 –

回答

0

維護數據庫的連接隊列,與數據庫的ipaddresses,使用多線程連接到每個數據庫的,現在從數據庫中完成的工作,關閉該數據庫的連接,從隊列中刪除連接。

1

併發救援。

爲了讓您的繁重工作負載達到最佳吞吐量,從一開始就將應用程序編寫爲多線程,然後根據性能限制,您可以加快速度或縮短速度。

ExecutorService是以可擴展的方式分解任務的好方法。我建議你將每個數據庫導入任務定義爲Callable,然後從ExecutorService'調用'所有任務。

我會做這樣的事情:

List<YourCallableImportJobs> work= yourFactory.getAllWork(); 
// this variable can be used to tweak performance. 
// Begin with a low number and then ramp it up if it's too slow. 
int nThreads=10;  
ExecutorService service = ExecutorService.newFixedThreadPool(nThreads); 
List<Future<T>> futures= service.invokeAll(work); 

您可查詢Futures檢查時,工作就完成了......

最後,如果你想爲每個數據庫的併發訪問(特別是爲您的目標數據庫),我建議使用連接池機制,如C3PO。這意味着你不需要花太多時間打開和關閉連接。 (你甚至可以將每個導入細分爲單獨的查詢 - 這是在連接池也會有幫助的時候)。

希望這有助於

+0

感謝埃米爾的解決方案,我會嘗試一下。 –