hyperscan是intel开发的用于高效正则匹配的工具。适用场景就是数据量大,性能要求高,匹配关键字领域。
hyperscan会把需要检测的关键字/正则表达式转换成对应的db数据,然后使用这些db数据进行匹配。所以如果数据更改了,需要重新创建。
理论上只能在intel的x86架构下才可以正常使用,因为intel使用了一些硬件特性进行加速。arm下也能编译使用,可能性能会受影响。
编译依赖库
编译colm
https://github.com/adrian-thurston/colm
./autogen.sh
./configure --prefix=/home/colminstall
make
make install
把colm安装到一个目录,不适用默认路径,避免对系统造成污染,并且如果后续迁移需要,可以直接拷贝编译的文件。
编译ragel
https://github.com/adrian-thurston/ragel
./autogen.sh
./configure --with-colm=/home/colminstall --disable-manual --prefix=/home/ragelinstall
make
make install
ragel需要colm,指定上面编译安装的路径
禁用manual,因为编译报错,需要其他类库,但是也用不到,直接禁用即可
同样指定ragel安装到一个目录
编译hyperscan
https://github.com/intel/hyperscan
https://intel.github.io/hyperscan/dev-reference/getting_started.html#target-arch
下载boost
hyperscan需要boost,但是只需要boost的一些头文件,不用编译。
编译
cd <where-you-want-to-build-hyperscan>
mkdir <build-dir>
cd <build-dir>
cmake ../. -DBOOST_ROOT=/home/boost_1_82_0/ -DCMAKE_PROGRAM_PATH=/home/ragelinstall/bin/
make -j<jobs>
#测试
bin/unit-hyperscan
-DBOOST_ROOT=/xxx
指定boost目录
-DCMAKE_PROGRAM_PATH=/xxx
指定ragel可执行文件目录
Tip 为cmake的参数指定数值的方法就是-D,后面紧跟需要设置的参数名,然后加上等号,跟上需要设置的数值
指定ragel
hyperscan需要ragel,编译如果不指定,会报错,根据提示,查看hyperscan目录下的CMakeLists.txt
,可以看到find_program(RAGEL ragel)
,说明用的是ragel的bin文件,并不是类库,按照cmake官方文档 https://cmake.org/cmake/help/v3.0/command/find_program.html,需要指定CMAKE_PROGRAM_PATH
参数