我有一些數據要從多個sql server數據庫(如200)中讀取。在這些數據庫的每個數據庫中都會有10個表格,我需要從中讀取數據,我怎樣才能以最好的方式使用java來完成這項工作?從java連接到多個sql server數據庫
在此先感謝
我有一些數據要從多個sql server數據庫(如200)中讀取。在這些數據庫的每個數據庫中都會有10個表格,我需要從中讀取數據,我怎樣才能以最好的方式使用java來完成這項工作?從java連接到多個sql server數據庫
在此先感謝
維護數據庫的連接隊列,與數據庫的ipaddresses,使用多線程連接到每個數據庫的,現在從數據庫中完成的工作,關閉該數據庫的連接,從隊列中刪除連接。
併發救援。
爲了讓您的繁重工作負載達到最佳吞吐量,從一開始就將應用程序編寫爲多線程,然後根據性能限制,您可以加快速度或縮短速度。
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。這意味着你不需要花太多時間打開和關閉連接。 (你甚至可以將每個導入細分爲單獨的查詢 - 這是在連接池也會有幫助的時候)。
希望這有助於
感謝埃米爾的解決方案,我會嘗試一下。 –
聽起來像Hadoop的一個情況? – ControlAltDel
您最關心的是什麼?速度?記憶?還要別的嗎? – ControlAltDel
它需要相當的速度,這將是一個每晚2-3小時的完成導入過程,並且還有其他4個應用程序可以從每晚導入大小爲100的Mbs數據到我們的應用程序中。 –