0

我的任务是创建一个独立的 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 框架来加快速度吗?在我的伪代码中,线程在其生命周期内保持数据库连接。我可以在 Executor 框架中执行此操作吗?

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

提前致谢 :)

4

1 回答 1

2

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

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

于 2012-08-02T18:08:32.923 回答