我有一些数据要从多个 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);
您可以轮询Futures以检查工作何时完成......
最后,如果您希望同时访问每个数据库(尤其是目标数据库),我建议使用连接池机制,例如C3PO。这意味着您不会花费太多时间来打开和关闭连接。(您甚至可以将每个导入分解为单独的查询——此时连接池也会有所帮助)。
希望这可以帮助
使用这些数据库的 ipaddresses 维护一个数据库连接队列,使用多线程连接到每个数据库,现在随着数据库的工作完成,关闭来自该数据库的连接并从队列中删除连接。