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

python高效解析日志入库的更多相关文章

  1. 一、基于hadoop的nginx访问日志分析---解析日志篇

    前一阵子,搭建了ELK日志分析平台,用着挺爽的,再也不用给开发拉各种日志,节省了很多时间. 这篇博文是介绍用python代码实现日志分析的,用MRJob实现hadoop上的mapreduce,可以直接 ...

  2. python之配置日志的三种方式

    以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文件,然后使用fileCo ...

  3. Python之配置日志的几种方式(logging模块)

    原文:https://blog.csdn.net/WZ18810463869/article/details/81147167 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Py ...

  4. 【转】python之配置日志的几种方式

    [转]python之配置日志的几种方式 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用 ...

  5. python之配置日志的几种方式

    作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文 ...

  6. 《Python高效开发实战》实战演练——建立应用2

    为了在项目中开发符合MVC架构的实际应用程序,需要在项目中建立Django应用.每个Django项目可以包含多个Django应用.建立应用的语法为: #python manage.pystartapp ...

  7. Python高效编程技巧实战 实战编程+面试典型问题 中高阶程序员过渡

    下载链接:https://www.yinxiangit.com/603.html 目录:   如果你想用python从事多个领域的开发工作,且有一些python基础, 想进一步提高python应用能力 ...

  8. 分析Python中解析构建数据知识

    分析Python中解析构建数据知识 Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记 ...

  9. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

随机推荐

  1. 1121 if条件语句练习--输入年月日判断执行

    <script type="text/javascript"> var a=prompt("请输入一个年","请输入年份"); ...

  2. Struts2学习笔记-基本结构

    一个普通的的web应用文件结构如下: 1. 最上层是应用名,区分大小写,在浏览器输入应用名的时候,必须与应用名的大小一样,例如:localhost:8080/HelloWorld 2. 在应用下,放有 ...

  3. mysql优化之表建设

    就拿常见的用户表.文章类的表.日志表来分析如下 CREATE TABLE `user` (   `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMEN ...

  4. 深入理解.NET程序的原理 谈一谈破解.NET软件的工具和方法

    最近一段时间不忙,闲下来的空闲时间,重读了一下CLR的原理,回味一下有关程序集的的知识,顺便练了一下手,学习致用,破解了若干个.NET平台的软件.以此来反观.NET程序开发中,需要注意的一些问题. 基 ...

  5. INFO - InstallShield中的InstallScript工程Setup.exe /s的使用细节

    在InstallShield的各种工程类型中,Basic MSI工程Build出的安装包基于Windows Installer标准,所以默认就支持静默安装(至于如何静默安装,请自行补充相关知识).而对 ...

  6. Java中BigDecimal的8种舍入模式

    java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是小数点后的位 ...

  7. Zookeeper开源客户端框架Curator简介[转]

    Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情 ...

  8. HDU 3844 Mining Your Own Business

    首先,如果图本来就是一个点双联通的(即不存在割点),那么从这个图中选出任意两个点就OK了. 如果这个图存在割点,那么我们把割点拿掉后图就会变得支离破碎了.对于那种只和一个割点相连的块,这个块中至少要选 ...

  9. 巧用css border

    上下左右边框交界处呈现平滑的斜线.利用这个特点,通过设置不同的上下左右边框宽度或颜色,可以得到小三角.梯形等. 调整宽度大小可以调节三角形形状. 实现三角形 示例1: #test1{ height:2 ...

  10. JMeter教程01-下载和安装

    下载JMeter http://jmeter.apache.org/download_jmeter.cgi 以上是下载地址 更多课程 访问www.bamn.cn 北盟网校 下载后解压 apache-j ...