EBILS -Erlang Binary Lightweight 검색
순수한 Erlang으로 크고 거대한 바이너리에 대한 단일 바이너리 검색으로 작은 바이너리 덩어리를 사용하여 단일 프로세스를 사용하여 주요 프로세스에 메시지를 전달합니다.
대형 바이너리의 단일 테스트를 사용하면이 방법은 단일 binary:match 보다 17 배 빠를 수 있으며 프로세스에서 결과를 찾을 수 있습니다.
단일 예 :
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와 함께 사용되는 EBIL의 기본 이름 : 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