日期:2014-05-16  浏览次数:20633 次

从文件导数据到数据库的性能优化思路(笔记)

概述

     最近公司一.NET项目需要对其日志Log入数据库统计,写这个脚本导入的任务便落到我身上了。采用了熟练的Java,这个日志也不是很大,一个文件大概几兆,有上万条数据,一天大概有7,8个文件需要这样的导入处理。由于之前写Web没有这么去批处理这么多数据,所以没有太注意性能,第一个版本程序导入速度慢的吓人,一个文件导完可能需要10多分钟,也就是说如果把每天的文件导完可能需要2个多小时的时间,听听就很蛋疼,最终经过优化后,一个文件导入也就几秒,甚至可以更短。目标日志文件的信息都是按行存储,所以程序中按行读取后,然后进行相应的字符串截取入库。下面则为思路分享以及主要代码的分享。
 
优化思路
     1.程序流程:
       程序先读取本地的文件到内存,然后把内存的数据批量Insert到数据库。
     2.归纳:
     可以看出首先程序需要进行文件IO操作,然后则是数据JDBC操作,所以优化方向大致可以是以下几个:
          a.文件IO优化
          b.JDBC操作优化
          c.使用多线程并行JDBC操作
 文件常见IO简介
     Java的文件读写操作大概有这么几种方式,但是我们应该注意几种文件操作方式的区别,哪些操作方式适合不同的数据文件对象。
     1.(InputStream/OutputStream)    为字节输入/输出流,这种读写方式都是按一定字节量读取数据。
     2. (FileInputStream/FileOutputStream) 此方法继承自上面的(InputStream/OutpustStream),同样按字节流输入/输出,用于读取图像之类的原始字节流
     3.(FileReader/FileWriter) 此方法适用于按字符流的文件操作
    &