ebils-埃爾蘭二進制輕量級搜索
單個二進制搜索對純Erlang的大型二進制搜索,這使用了一小部分二進製文件,使用單個過程搜索它們,並將消息傳遞到主過程。
通過大型二進制的單個測試,此方法的單個binary:match並允許您在此過程中查找結果。
一個示例:
1 > { ok , File } = file : read_file ( " test.data " ).
{ ok ,<< " AAAAAAAA|J|89 n BBBBBBBB|J|89 n CCCCCCC|J|89 n DDDDDDDD|J|89 n EEEEEEE|J|89 n FFFFFFFF|J|89 n " ...>>}
2 > byte_size ( File ).
234179947
3 > ebils : load ( File , << " n " >>).
true
4 > timer : tc ( ebils , search , [<< " ZbZbZbZbZb " >>]).
{ 4031 ,{{ ok ,{ 2341677 , 13 }, < 0.161 . 0 > }}
5 > { Found , Pid } = ebils : search (<< " ZbZbZbZbZb " >>).
{ ok ,{ 2341677 , 13 }, < 0.160 . 0 > }
6 > ebils : fetch ( Pid , { get , { found , Found }, 4 }).
{ ok ,<< " ZbZbZbZbZb|J|89 " >>}在示例中:
將二進製文件加載到系統中以進行匹配之後,您可以為工人指定名稱,為處理二進制的工人的長度以及用於拆分塊的模式。
ebils:load(Binary::binary(), Pattern::binary()) -> true
ebils:load(Name::atom(), Binary::binary(), Pattern::binary()) -> true
ebils:load(Name::atom(), Binary::binary(), Pattern::binary(), Workers::non_neg_integer()) -> true
在預裝的二進制中搜索單個二進製文件,您可以指定要尋找的二進製文件和工人的名稱(ebils的默認名稱,與ebils一起使用:search/1)
ebils:search(Binary::binary()) -> {ok, {non_neg_integer(), non_neg_integer()}, pid()}
ebils:search(Name::atom(), Binary()) -> {ok, {non_neg_integer(), non_neg_integer()}, pid()}
從找到二進制的過程中獲取數據。使用PID使用一個簡單的Gen_Server調用,其中找到數據和元組發現的數據,還應提供第三個參數,其中包含要檢索的數據大小。
ebils:fetch(pid(), {get, {found, {non_neg_integer(), non_neg_integer}}, integer}) -> {ok, binary()}
卸載所有保存在流程中並殺死流程的數據,您可以為工人指定名稱,此方法將有助於重新運行數據(如果二進制更改)
ebils:unload() -> ok
ebils:unload(Name::atom()) -> ok
用新的二進製文件刷新塊和工人(過程)
ebils:reload(Binary :: binary() | [binary(), ...], Pattern :: binary()) -> ok
ebils:reload(Name :: atom(), Binary :: binary() | [binary(), ...], Pattern :: binary()) -> ok
ebils:reload(Name :: atom(), Binary :: binary() | [binary(), ...], Pattern :: binary(), Workers :: non_neg_integer()) -> ok