Ebils - pencarian ringan Erlang Binary
Pencarian biner tunggal untuk biner besar dan besar ke Erlang murni, ini menggunakan potongan kecil binari untuk mencari di dalamnya menggunakan proses tunggal dan mengirimkan pesan ke proses utama.
Dengan uji tunggal dari biner besar, metode ini bisa 17x lebih cepat dari binary:match dan memungkinkan Anda mencari hasil dalam prosesnya.
Satu contoh:
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 " >>}Dalam contoh:
Muat biner ke dalam sistem untuk digunakan setelah mencari kecocokan, Anda dapat menentukan nama untuk pekerja, lama pekerja yang dibuat untuk memproses biner dan pola untuk membagi potongan.
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
Cari biner tunggal ke dalam biner yang dimuat sebelumnya, Anda dapat menentukan biner untuk mencari dan nama untuk para pekerja, (nama default ke ebil, digunakan dengan ebil: pencarian/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()}
Dapatkan data dari proses di mana biner ditemukan. Gunakan panggilan Gen_Server sederhana menggunakan PID di mana ditemukan data dan tuple dari data yang ditemukan, Anda juga harus memberikan parameter ketiga yang berisi ukuran data untuk diambil.
ebils:fetch(pid(), {get, {found, {non_neg_integer(), non_neg_integer}}, integer}) -> {ok, binary()}
Bongkar semua data yang disimpan dalam proses dan bunuh proses, Anda dapat menentukan nama untuk pekerja, metode ini akan membantu untuk menjalankan kembali data (jika biner berubah)
ebils:unload() -> ok
ebils:unload(Name::atom()) -> ok
Segarkan potongan dan pekerja (proses) dengan binari baru di negara bagian mereka
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