0

这是我的应用程序的基本概要(连接到 SQLite DB):

  1. 它扫描一个目录并创建一个包含 8-15 个需要读取的不同平面文件的列表。

  2. 它识别平面文件并根据文件扩展名选择通用的准备好的语句。

  3. 然后它逐行读取平面文件,并将准备好的语句与已设置的字符串添加到批处理中。批处理每 1,000 条语句执行一次。一些有问题的文件有 200,000 行需要读取。

  4. 一旦所有文件都插入到数据库中(每种文件类型都有一个不同的表),程序会将每个表的特定列更新为一个公共值。

  5. 该程序为每种文件类型创建一个新文件,并将数据库中的信息提取到新文件中。

目前,在一个包含大约 9 个非常小的文件(少于 50 行)和一个非常大的文件(超过 200,000 行)的目录上运行大约需要 1.5 分钟。我希望能更快地得到这个。

先问几个问题:

  1. 我应该关闭并打开程序每个部分的数据库连接(加载、更新、提取)还是保持连接打开并将其传递给每个不同的方法。

  2. 我应该在处理每个文件后关闭准备好的语句吗?或者只是在每个文件之后清除参数并在方法结束时关闭它(基本上是在加载所有作业之后)?

我对任何其他关于我应该关注的事情的评论感兴趣,以最大限度地提高这个应用程序的性能。

谢谢。

4

1 回答 1

0

我将把接下来的事情作为第一步: 1)使用像DBCP
这样的 JDBC 连接池 2)在单独的线程中读取文件并将数据推送到 DB 的拆分作业,以便一个线程处理一个文件并将标志写入一个表完成 3) 反向过程相同

打开/关闭连接是一项昂贵的操作 - 所以你应该打开它一次并在所有事情完成后关闭。
声明也一样。Prepared statement (以及其他) - 是 JDBC 驱动程序编译的语句,可提高其执行性能;您在开始时创建一次并在所有工作完成后关闭。

于 2019-11-15T17:13:40.813 回答