我有一些数据要从多个sql server数据库(如200)中读取。每个数据库中都会有10个表,我需要从中读取数据,如何使用java以最佳方式执行此操作?
提前致谢
答案 0 :(得分: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。这意味着您不会花太多时间打开和关闭连接。 (您甚至可以将每个导入分解为单个查询 - 这时连接池也会有所帮助。)
希望这有帮助
答案 1 :(得分:0)
维护一个数据库连接队列,使用这些数据库的ipaddresses,使用多线程连接到每个数据库,现在当数据库完成工作时,关闭该数据库的连接并从队列中删除连接。