如何使用我的应用程序提高JDBC性能

时间:2012-03-02 17:24:43

标签: java jdbc sqlitejdbc

以下是我的应用程序的基本概要(连接到SQlLite数据库):

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

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

  3. 然后逐行读取平面文件,并添加准备好的语句,并将字符串设置为批处理。批处理每1,000个语句执行一次。有些文件有200,000行需要阅读。

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

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

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

    首先提出几个问题:

    1. 我是否应该为程序的每个部分关闭并打开数据库连接(加载,更新,解压缩)或保持连接打开并将其传递给每个不同的方法。

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

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

      感谢。

1 个答案:

答案 0 :(得分:0)

我将接下来的事情作为第一步:
1)使用DBCP之类的JDBC连接池
2)拆分作业,该作业在单独的线程中读取文件并将数据推送到DB,以便一个线程处理一个文件并将标记已完成的标志写入一张表
3)对于逆向处理

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