解析非常大的日志文件(> 1Gb,<5Gb)

cas*_*als 4 logging parsing text

我需要解析非常大的日志文件(> 1Gb,<5Gb) - 实际上我需要将数据剥离到对象中,以便将它们存储在数据库中.日志文件是顺序的(没有换行符),如:

TIMESTAMP = 200901.01亿; PARAM1 = Value11; PARAM2 = Value21;参数3 = Value31; TIMESTAMP = 20090101000100; PARAM1 = Value11; PARAM2 = Value21;参数3 = Value31; TIMESTAMP = 20090101000152; PARAM1 = Value11; PARAM2 = Value21;参数3 = Value31; .. .

我需要将其删除到表中:

TIMESTAMP | PARAM1 | PARAM2 | 参数3

该过程需要尽可能快.我正在考虑使用Perl,但任何使用C/C++的建议都会非常受欢迎.有任何想法吗?

最好的祝福,

亚瑟

Dav*_*ave 11

在Perl中编写原型并将其性能与从存储介质读取数据的速度进行比较.我的猜测是你将受到I/O限制,这意味着使用C不会提供性能提升.


Rob*_*Rob 8

关于使用Python生成器的演示文稿引起了我的注意:http: //www.dabeaz.com/generators-uk/

David M. Beazley通过基本为每个处理步骤定义生成器来演示如何处理多GB的日志文件.然后将发生器"插入"到另一个,直到您有一些简单的实用程序功能

lines = lines_from_dir("access-log*","www")
log   = apache_log(lines)
for r in log:
    print r
Run Code Online (Sandbox Code Playgroud)

然后可以用于各种查询:

stat404 = set(r['request'] for r in log
                if r['status'] == 404)

large = (r for r in log
           if r['bytes'] > 1000000)
for r in large:
    print r['request'], r['bytes']
Run Code Online (Sandbox Code Playgroud)

他还表明性能与标准unix工具(如grep,find等)的性能相当.当然这是Python,它比perl或awk脚本更容易理解,更重要的是更容易定制或适应不同的问题集.

(上面的代码示例是从演示幻灯片中复制的.)


Nik*_*sov 5

Lex非常好地处理这类事情.

  • 我喜欢有人使用工具*好*用于它不想做的事情. (2认同)