日志处理时,遇到多种re表达式轮循匹配的高性能处理方式
一般的处理方式,是建立一个正则表达式列表,依次尝试匹配,成功则返回,这种方式往往会遇到性能问题
- 同样的样本数据, 用传统的newlogp方式仅做re部分,用hp做先定位后匹配,后者有明显的优势
ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python normaltest.py
11547.538814992658
real 1m27.067s
user 1m26.248s
sys 0m0.212s
说明:上面是用python3跑的一般正则匹配100万条
ubuntu@VM-0-13-ubuntu:~/highperf_re$ time /home/ubuntu/pypy3/bin/pypy3 normaltest.py
22142.39115540099
real 0m51.722s
user 0m46.440s
sys 0m0.500s
说明:用pypy3跑的结果,几乎快一倍
ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python hptest.py
379582.7860370719
real 0m4.326s
user 0m3.564s
sys 0m0.188s
说明:用hyperscan仅做模式识别(判断使用哪个RE)速度惊人
ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python newtest.py
282825.5283797949
real 0m4.742s
user 0m4.540s
sys 0m0.156s