複数の SQL Server データベース (200 など) から読み取るデータがあります。これらのデータベースのそれぞれに、データを読み取る必要があるテーブルが 10 個ほどありますが、Java を使用して可能な限り最善の方法でこれを行うにはどうすればよいでしょうか?
前もって感謝します
複数の SQL Server データベース (200 など) から読み取るデータがあります。これらのデータベースのそれぞれに、データを読み取る必要があるテーブルが 10 個ほどありますが、Java を使用して可能な限り最善の方法でこれを行うにはどうすればよいでしょうか?
前もって感謝します
救助への同時性。
重いワークロードで最高のスループットを実現するには、アプリケーションを最初からマルチスレッドとして記述し、パフォーマンスの制約に応じて高速化または抑制します。
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);
Futureをポーリングして、作業がいつ完了したかを確認できます...
最後に、各データベース (特に目的のデータベース) への同時アクセスが必要な場合は、C3POなどの接続プーリング メカニズムを使用することをお勧めします。これは、接続の開閉にあまり時間をかけないことを意味します。(各インポートを個々のクエリに分割することもできます。これは、接続プールも役立つ場合です)。
お役に立てれば
データベース接続のキューを維持し、それらのデータベースの IP アドレスを使用して、マルチスレッドを使用して各データベースに接続し、データベースからの作業が終了したら、そのデータベースからの接続を閉じ、キューから接続を削除します。