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
參數