Ebils - Erlang Binary Lightweight Search
การค้นหาแบบไบนารีเพียงครั้งเดียวสำหรับไบนารีขนาดใหญ่และขนาดใหญ่เป็น Erlang บริสุทธิ์สิ่งนี้ใช้ไบนารีเล็ก ๆ น้อย ๆ เพื่อค้นหาโดยใช้กระบวนการเดียวและส่งข้อความไปยังกระบวนการหลัก
ด้วยการทดสอบครั้งเดียวของไบนารีขนาดใหญ่วิธีนี้สามารถเร็วขึ้น 17 เท่าที่ 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: ค้นหา/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()}
รับข้อมูลจากกระบวนการที่พบไบนารี ใช้การโทร gen_server อย่างง่ายโดยใช้ PID ที่พบข้อมูลและข้อมูลที่พบคุณควรจัดเตรียมพารามิเตอร์ที่สามที่มีขนาดของข้อมูลเพื่อดึงข้อมูล
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