Ebils - Erlang البحث الثنائي خفيف الوزن
هذا بحث ثنائي واحد عن ثنائي كبير وضخم في إرلانج النقي ، وهذا يستخدم جزءًا صغيرًا من الثنائيات للبحث فيها باستخدام عمليات واحدة وتقديم رسالة إلى العملية الرئيسية.
مع اختبارات واحدة لثنائي كبير ، يمكن أن تكون هذه الطريقة أسرع 17x تلك 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()}
الحصول على البيانات من العملية حيث تم العثور على الثنائي. استخدم مكالمة 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