使用与ExecutorService线程的恒定连接



我有一项任务要创建一个独立的java应用程序来完成以下任务:

  1. 分析.csv文件。(这将有大约300万条记录)
  2. 对于每条记录,在几个DB表中插入约15行
  3. 如果.csv记录是否成功处理,则输出

我目前设计这个的想法是:

  1. 阅读.csv文件(还没有考虑这个步骤)
  2. 为.csv中的每条记录创建一个工作/任务对象。将所有这些任务对象放在队列/列表中
  3. 创建预定义数量的线程(老式,不使用Executor框架)

每个线程都有一个逻辑:

  1. 创建数据库连接
  2. if(getNextJobFromList() != null)
    // Prepare and insert the statements in a batch update.
  3. 关闭数据库资源
  4. 给出输出状态

时间在这里是一个很大的制约因素。

现在的问题是:

  1. 我可以使用Executor框架加快速度吗?在我的伪代码中,线程在其生命周期中保持DB连接。我可以在Executor框架中做到这一点吗?

  2. 有其他方法可以优化吗?

提前感谢:)

您可以使用Executor来执行此操作。这听起来不是一个好主意,你会让数据库不堪重负,而且你的大多数线程都会花时间等待。

我认为您最好批量导入数据库(如果您使用的是Oracle,则使用SQL*Loader,其他数据库也有类似的工具),不需要多线程。大容量复制非常快,它可以关闭约束检查和索引修改,只会抓取数据。它比JDBC快几个数量级,如果你想要速度,你应该看看它。

相关内容

  • 没有找到相关文章

最新更新