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