python高效解析日志入库
python脚本解析日志文件入库一般有三个重要的步骤:读文件、解析文件、入库。在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发)
1 读文件:一次读一行,磁盘IO太多,效率低下;一次性读如全部文件内容,可能内存不够。采取一个折中的办法,每次读若干byte(具体大小视实际情况而定)。
经过测试,得到结论,在我们写代码的时候应该这样写
f = open(path,'r')
for line in f :
.............
这是系统提供的一种读文件的方法,一般比我们自己每次读若干byte要快(f.read(20000)),具体怎么做到的,现在还不清楚。总之,系统提供的,
应该差不了,不然也太丢人。啊哈!
2 解析日志,如果用到正则表达式,应该先编译然后再查找,这样可以提高速度。例如 :
regex0 = re.compile("(^|;)mobile=(\d+)")
mobile_number=regex0.search(self.resp_log).group(2)
当然,这是一个大方面,精细的方面我们还要在正则的写法上下功夫。关于Python的正则的高效写法,后续会专门用一边文章来写。
3 入库:网上有好多建议使用executemany()这个写法,insert into tablename(xx,xx) values(yy,yy),(yy,yy)....的形式却会快很多,
我们应 该直接把我们的SQL拼接成这种形式,效率远远高于executemany(),具体一次性要插入多少行,自己测一下哦。每秒1W应该没问题。
==============================================================================
按照上面的写法,可以保证读文件、解析文件、入库每个环节都做到最优,但是在整体结构上还有优化的空间,详细如下:
1 启一个线程readThread只负责读文件,然后把读到的内容放到队列Queue1中;
2 启一个线程manageThread只负责解析文件内容,然后把解析好的东西放到Queue2中;
3 启动第三个线程writeDB负责将解析好的文件内容入库;
4 开启一个后台线程对1、2、3三个线程的运行状况进行监控、记录与处理。
最新文章
- Puppet自动化运维-资源介绍篇(4)
- T-SQL:毕业生出门需知系列(七)
- RESTful简单介绍(入门)
- NK3C开发要点
- xml读写文件实例
- Android 查看內存使用
- Java List循环(转)
- 浅谈PetShop之使用存储过程与PLSQL批量处理(附案例)
- Linux程序设计(一)入门
- DML、DDL、DCL区别及介绍
- (转)Eclipse快捷键 10个最有用的快捷键
- [Spring面试] 问题整理
- MySQL中的查询子句
- 1.8分布式集群模式基础(VM安装多台服务器)
- 从C过渡到C++的几个知识点(结构体、引用、重载运算符)
- javascript高级程序设计第3版——第3章 基本概念
- ActionFilterAttribute 全局记录API日志
- 【Mybatis】一对多实例
- macOS 升级后重装命令行工具的问题
- c#:判断一个数组元素中否有重复元素
热门文章
- Could not load file or assembly 'System.Data.SQLite' or one of its dependencies. 试图加载格式不正确的程序。
- MyEclipse8.6中提交SVN报错
- 安装Python图型处理库Python Imaging Library(PIL)
- 基于Chromium构建Chrome WebBrowser for .net 控件(还有点心得体会)
- Winform TreeView 查找下一个节点
- 转:LIRe 源代码分析
- Docker实践(2)—虚拟网络
- AppExchange Partner Keynote
- linux centos java 应用服务器配置
- c++标准库