关于在jdbc中使用多线程的教程

我们公司有一个每天运行的批处理应用程序,它主要执行一些与数据库相关的工作,例如,从文件将数据导入数据库表。

该应用程序中定义了20多个任务,每个任务可能取决于其他任务。应用程序一个接一个地执行任务,整个应用程序在单个线程中运行。

完成所有任务需要3到7个小时。我认为它太长了,所以我想也许我可以通过多线程来提高性能。

我认为,由于任务之间存在依赖性,因此使任务并行运行不是很好(或者很不容易),但是也许我可以使用多线程来提高任务内部的性能。

例如:我们有一个定义为“

ImportBizData”的任务,该任务将数据从数据文件(通常包含100,0000+行)复制到数据库表中。我想知道是否值得使用多线程?

据我对多线程的了解,我希望有人提供有关此主题的一些教程链接。

回答:

多线程将提高您的性能,但您需要了解以下几点:

  1. 每个线程都需要自己的JDBC连接。无法在线程之间共享连接,因为每个连接也是事务。
  2. 分批上载数据,不时上载commit以避免累积大量的回滚/撤消表。
  3. 将任务分为几个工作单元,每个单元执行一项工作。

详细说明最后一点:当前,您有一个任务,可以读取文件,解析文件,打开JDBC连接,进行一些计算,将数据发送到数据库等。

您应该做什么:

  1. 一个(!)线程读取文件并从中创建“作业”。每个工作都应包含一个很小但不能太小的“工作单元”。将它们推入队列
  2. 下一个线程等待队列中的作业并进行计算。当步骤1中的线程等待慢速硬盘返回新的数据行时,可能会发生这种情况。此转换步骤的结果进入下一个队列
  3. 一个或多个线程通过JDBC上载数据。

第一个和最后一个线程的速度很慢,因为它们受I /

O约束(硬盘速度很慢,网络连接更糟)。另外,在数据库中插入数据是一项非常复杂的任务(分配空间,更新索引,检查外键)

使用不同的工作线程有很多优点:

  1. 分别测试每个线程很容易。由于它们不共享数据,因此不需要同步。队列将为您做到这一点
  2. 您可以快速更改每个步骤的线程数以调整性能

以上是 关于在jdbc中使用多线程的教程 的全部内容, 来源链接: utcz.com/qa/418857.html

回到顶部