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++的建议都会非常受欢迎.有任何想法吗?
最好的祝福,
亚瑟
关于使用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脚本更容易理解,更重要的是更容易定制或适应不同的问题集.
(上面的代码示例是从演示幻灯片中复制的.)