Ebils - Erlang Binärer leichter Suche
Als einzelne binäre Suche nach großer und riesiger Binärdatoren in reinem Erlang verwendet dies ein kleiner Teil von Binärdateien, um sie mit einzelnen Prozessen zu suchen und die Nachricht an den Hauptprozess zu übermitteln.
Bei einzelnen Tests einer großen binary:match kann diese Methode 17x schneller sein
Ein einzelnes Beispiel:
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 " >>}Im Beispiel:
Laden Sie ein Binärdes in das System, das Sie nach der Suche nach Übereinstimmungen verwenden sollten.
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
Durchsuchen Sie eine einzelne Binärin in die vorinstallierte binäre Binärdatei, Sie können die Binärdatei und den Namen für die Arbeiter angeben (Standardname für Ebils, verwendet mit 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()}
Holen Sie sich die Daten aus dem Prozess, in dem die Binärdatei gefunden wurde. Verwenden Sie einen einfachen Gen_Server -Aufruf mit der PID, bei der die Daten und das Tupel der gefundenen Daten gefunden wurden. Außerdem sollten Sie einen dritten Parameter bereitstellen, der die Größe der Daten zum Abrufen enthält.
ebils:fetch(pid(), {get, {found, {non_neg_integer(), non_neg_integer}}, integer}) -> {ok, binary()}
Entladen Sie alle Daten, die in Prozessen aufbewahrt werden, und töten Sie die Prozesse ab.
ebils:unload() -> ok
ebils:unload(Name::atom()) -> ok
Aktualisieren Sie die Brocken und die Arbeiter (Prozesse) mit neuen Binärdateien in ihrem Bundesstaat
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