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三个线程的运行状况进行监控、记录与处理。

最新文章

  1. Puppet自动化运维-资源介绍篇(4)
  2. T-SQL:毕业生出门需知系列(七)
  3. RESTful简单介绍(入门)
  4. NK3C开发要点
  5. xml读写文件实例
  6. Android 查看內存使用
  7. Java List循环(转)
  8. 浅谈PetShop之使用存储过程与PLSQL批量处理(附案例)
  9. Linux程序设计(一)入门
  10. DML、DDL、DCL区别及介绍
  11. (转)Eclipse快捷键 10个最有用的快捷键
  12. [Spring面试] 问题整理
  13. MySQL中的查询子句
  14. 1.8分布式集群模式基础(VM安装多台服务器)
  15. 从C过渡到C++的几个知识点(结构体、引用、重载运算符)
  16. javascript高级程序设计第3版——第3章 基本概念
  17. ActionFilterAttribute 全局记录API日志
  18. 【Mybatis】一对多实例
  19. macOS 升级后重装命令行工具的问题
  20. c#:判断一个数组元素中否有重复元素

热门文章

  1. Could not load file or assembly 'System.Data.SQLite' or one of its dependencies. 试图加载格式不正确的程序。
  2. MyEclipse8.6中提交SVN报错
  3. 安装Python图型处理库Python Imaging Library(PIL)
  4. 基于Chromium构建Chrome WebBrowser for .net 控件(还有点心得体会)
  5. Winform TreeView 查找下一个节点
  6. 转:LIRe 源代码分析
  7. Docker实践(2)—虚拟网络
  8. AppExchange Partner Keynote
  9. linux centos java 应用服务器配置
  10. c++标准库