使用python解析日志文件入库一般有三个重要的步骤:读文件、解析文件、入库。
在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发)。
一、读文件:一次读一行,磁盘IO太多,效率低下;一次性读如全部文件内容,可能内存不够。采取一个折中的办法,每次读若干byte(具体大小视实际情况而定)。经过测试,得到结论,在我们写代码的时候应该这样写:
f = open(path,'r')
for line in f :
.............
这是系统提供的一种读文件的方法,一般比我们自己每次读若干byte要快(f.read(20000)),具体怎么做到的,现在还不清楚。总之,系统提供的,应该差不了,不然也太丢人。啊哈!
二、解析日志,如果用到正则表达式,应该先编译然后再查找,这样可以提高速度。例如 :
regex0 = re.compile("(^|;)mobile=(d+)")
mobile_number=regex0.search(self.resp_log).group(2)
当然,这是一个大方面,精细的方面我们还要在正则的写法上下功夫。关于Python的正则的高效写法,后续会专门用一边文章来写。
三、入库:网上有好多建议使用executemany()这个写法,其实这个写法是比较慢的。批量插入一般翻译成SQL是insert into tablename(xx,xx) values(yy,yy),(yy,yy)....的形似,我们应 该直接把我们的SQL拼接成这种形式,效率远远高于executemany(),具体一次性要插入多少行,自己测一下哦。每秒1W应该没问题。
欢迎批评、欢迎砸砖,有事留言交流。本站QQ群:161228069 。