论坛首页 Java企业应用论坛

解析日志文件插入数据库(Java如何设计可以获得高性能)

浏览 10802 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-10  
    日志文件格式如下:
   
2007-12-25 08:55:17,421 INFO  com.footmark.b2bifq.util.B2BIFQHandler - *** Session request started ***
2007-12-25 08:55:17,437 INFO  com.footmark.b2bifq.util.B2BIFQHandler - *** Session request started ***
2007-12-25 08:55:45,046 INFO  com.footmark.b2bifq.util.B2BIFQHandler - *** Session response ended ***
2007-12-25 08:55:46,796 INFO  com.footmark.b2bifq.util.B2BIFQHandler - *** Session response ended ***
   


   每一行对应数据库的一条记录,因为每天会产生上万条日志记录,怎样设计才能获得高性能.如果读一条,插入一条的话,速度太慢了.
   请各位指点迷津,有没有别的好的设计(高性能)或用有的框架.谢谢
   发表时间:2008-03-10  
同问,用户一天产生10G左右的日志文件
要求入库,头大了
0 请登录后投票
   发表时间:2008-03-10  
为何要插入数据库?
0 请登录后投票
   发表时间:2008-03-10  
可以用异步的log,就是把log输出交给其他线程来做,log4j有这样的功能。
要不做个缓存,比如把1000条log数据放到list中,然后一次DB连接,把所有的纪录插入到DB中。

上面两个方法可以结合
0 请登录后投票
   发表时间:2008-03-10  
mq也可以实现啊,反正就是异步了
0 请登录后投票
   发表时间:2008-03-11  
夜间了,只是想,性能上能有很大的突破,能否给出实例
0 请登录后投票
   发表时间:2008-03-11  
log4j本身就支持写入数据库中,只是一个配置的问题。
关键是有必要把大把大把的数据写入数据库吗?
0 请登录后投票
   发表时间:2008-03-11  
Log4J本身支持将日志异步写入数据库。参考SpringSide的文章:http://wiki.springside.org.cn/display/springside/Log4j
0 请登录后投票
   发表时间:2008-03-11  
一天上万条的数据量一点也不大啊。

10G倒是不小。

如果不要求实时的化,用数据库本身的导入解决方案吧,比如mysql用LOAD DATA(应该用jdbc也能调用的),效率很高的,不过10G的文件的话还是建议文件分割之后再LOAD,表也不要设置索引什么的以提高导入效率,如果记录数太多,建议分表存储。

如果不用数据库本省的解决方案,那可以用jdbc的executeBatch,当然效率也不见得能提供很多,使用jdbc的时候注意:
1.不用在操作过程频繁打开关闭连接,一个连接开了,尽量就一直用下去。
2.去除表索引。
3.多线程处理,每个线程用单独的数据库连接。
4.分表或者多个线程同时向多个数据库服务器插入,以后再想办法合并处理。
0 请登录后投票
   发表时间:2008-03-12  
perl,awk,load data,这种数据量还不算大,亿条日志都不成问题。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics