مجموعة البتات
يقدم هذا الموضوع آلية مجموعة البتات التي تساعد على تمكين الوظائف الرئيسية مثل تصفية السمات وعمليات الحذف في ميلفوس.
نظرة عامة
مجموعة البتات هي مجموعة من البتات. البتات هي عناصر ذات قيمتين محتملتين فقط، عادةً 0
و 1
، أو قيم منطقية true
و false
. في ميلفوس، مجموعات البتات هي صفائف من أرقام البتات 0
و 1
التي يمكن استخدامها لتمثيل بيانات معينة بشكل مضغوط وفعال على عكس الإنتس أو العوامة أو الأحرف. رقم البت هو 0
بشكل افتراضي ولا يتم تعيينه إلى 1
إلا إذا كان يفي بمتطلبات معينة.
تُجرى العمليات على مجموعات البت باستخدام المنطق المنطقي، والتي بموجبها تكون قيمة الخرج إما صالحة أو غير صالحة، ويُشار إليها أيضًا بـ 1
و 0
على التوالي. على سبيل المثال، يمكن استخدام المشغل المنطقي AND
للمقارنة بين مجموعتي بتات استنادًا إلى عنصرين في نفس مواضع الفهرس وإنتاج مجموعة بتات جديدة بالنتائج. إذا كان عنصران في موضع ما متماثلين، فسيتم كتابة مجموعة البتات الجديدة 1
في ذلك الموضع؛ 0
إذا كانا مختلفين.
التنفيذ
Bitset هي آلية بسيطة لكنها قوية تساعد ميلفوس على تنفيذ تصفية السمات وحذف البيانات والاستعلام مع السفر عبر الزمن.
تصفية السمات
بما أن مجموعات البت تحتوي على قيمتين محتملتين فقط، فهي مثالية لتخزين نتائج تصفية السمات. يتم تمييز البيانات التي تفي بمتطلبات مرشح سمة معينة بـ 1
.
حذف البيانات
تعمل مجموعات البتات كطريقة مضغوطة لتخزين المعلومات حول ما إذا كان صف في مقطع ما قد تم حذفه. يتم وضع علامة على الكيانات المحذوفة بـ 1
في مجموعة البتات المقابلة، والتي لن يتم حسابها أثناء البحث أو الاستعلام.
أمثلة
نقدم هنا ثلاثة أمثلة توضح كيفية استخدام مجموعات البتات في ميلفوس، مع إشارات إلى جميع التطبيقات الرئيسية الثلاثة لمجموعات البتات التي تمت مناقشتها أعلاه. في جميع الحالات الثلاث، يوجد مقطع يحتوي على 8 كيانات ثم يتم تنفيذ سلسلة من أحداث لغة معالجة البيانات (DML) بالترتيب الموضح أدناه.
- يتم إدراج أربعة من الكيانات، التي تكون
primary_key
s [1، 2، 3، 4] على التوالي، عندما يساوي الطابع الزمنيts
100. - يتم إدراج الكيانات الأربعة الباقية، التي
primary_key
s هي [5، 6، 7، 8]، عندما يساوي الطابع الزمنيts
200. - يتم حذف الكيانات التي
primary_key
s هي [7، 8] عندما يساوي الطابع الزمنيts
300. - الكيانات التي تكون
primary_key
s [1، 3، 5، 7] هي فقط الكيانات التي تكون s [1، 3، 5، 7] التي تستوفي شروط تصفية السمات.
ترتيب أحداث DML
الحالة الأولى
في هذه الحالة، يقوم المستخدم بتعيين time_travel
على أنه 150، مما يعني أن المستخدم يجري استعلامًا عن البيانات التي تفي ts = 150
. يوضح الشكل 1 عملية توليد مجموعة البتات.
أثناء مرحلة التصفية الأولية، يجب أن يكون filter_bitset
[1, 0, 1, 0, 1, 0, 1, 0]
، حيث يتم تمييز الكيانات [1، 3، 5، 7] على أنها 1
لأنها نتائج تصفية صالحة.
ومع ذلك، لم يتم إدراج الكيانات [4، 5، 6، 7] في قاعدة بيانات المتجهات عندما ts
يساوي 150. لذلك، يجب تمييز هذه الكيانات الأربعة على أنها 0 بغض النظر عن شرط التصفية. الآن يجب أن تكون نتيجة مجموعة البتات [1, 0, 1, 0, 0, 0, 0, 0]
.
كما تمت مناقشته في حذف البيانات، يتم تجاهل الكيانات التي تم تمييزها بـ 1
أثناء البحث أو الاستعلام. يجب الآن قلب نتيجة مجموعة البتات لكي يتم دمجها مع الصورة النقطية للحذف، مما يعطينا [0, 1, 0, 1, 1, 1, 1, 1]
.
أما بالنسبة لمجموعة بتات الحذف del_bitset
، فيجب أن تكون القيمة الأولية [0, 0, 0, 0, 0, 0, 1, 1]
. ومع ذلك، لا يتم حذف الكيانين 7 و 8 حتى ts
هو 300. لذلك، عندما يكون ts
هو 150، فإن الكيانين 7 و 8 لا يزالان صالحين. ونتيجة لذلك، فإن القيمة del_bitset
بعد السفر عبر الزمن هي [0, 0, 0, 0, 0, 0, 0, 0]
.
لدينا الآن مجموعتا بت بعد السفر عبر الزمن وتصفية السمة: filter_bitset
[0, 1, 0, 1, 1, 1, 1, 1]
و del_bitset
[0, 0, 0, 0, 0, 0, 0, 0]
. اجمع بين مجموعتي البت هاتين مع عامل المنطق الثنائي OR
. القيمة النهائية لـ result_bitset هي [0, 1, 0, 1, 1, 1, 1, 1]
، مما يعني أنه سيتم حساب الكيانين 1 و 3 فقط في مرحلة البحث أو الاستعلام التالية.
الشكل 1. البحث مع السفر عبر الزمن = 150.
الحالة الثانية
في هذه الحالة، يضبط المستخدم time_travel
على 250. يوضح الشكل 2 عملية توليد مجموعة البتات.
كما في الحالة الأولى، تكون مجموعة البتات الأولية filter_bitset
هي [1, 0, 1, 0, 1, 0, 1, 0]
.
تكون جميع الكيانات في قاعدة بيانات المتجهات عندما يكون ts
= 250. ولذلك، يبقى filter_bitset
كما هو عندما نحلل الطابع الزمني. مرة أخرى، نحتاج إلى قلب النتيجة والحصول على [0, 1, 0, 1, 0, 1, 0, 1]
.
أما بالنسبة لمجموعة البتات المحذوفة del_bitset
، فإن القيمة الأولية هي [0, 0, 0, 0, 0, 0, 1, 1]
. ومع ذلك، لم يتم حذف الكيانين 7 و 8 حتى ts
هو 300. لذلك، عندما يكون ts
هو 250، فإن الكيانين 7 و 8 لا يزالان صالحين. ونتيجة لذلك، فإن del_bitset
بعد السفر عبر الزمن هو [0, 0, 0, 0, 0, 0, 0, 0]
.
الآن لدينا مجموعتا بت بعد السفر عبر الزمن وتصفية السمة: filter_bitset
[0, 1, 0, 1, 0, 1, 0, 1]
و del_bitset
[0, 0, 0, 0, 0, 0, 0, 0]
. اجمع بين مجموعتي البت هاتين مع عامل المنطق الثنائي OR
. مجموعة_البتات الناتجة هي [0, 1, 0, 1, 0, 1, 0, 1]
. وهذا يعني أنه لن يتم احتساب سوى العناصر [1، 3، 5، 7] في مرحلة البحث أو الاستعلام التالية.
الشكل 2. البحث مع السفر عبر الزمن = 250.
الحالة الثالثة
في هذه الحالة، يضبط المستخدم time_travel
على 350. يوضح الشكل 3 عملية توليد مجموعة البتات.
كما هو الحال مع الحالات السابقة، تكون مجموعة البتات الأولية filter_bitset
هي [0, 1, 0, 1, 0, 1, 0, 1]
.
تكون جميع الكيانات في قاعدة بيانات المتجهات عندما يكون ts
= 350. وبالتالي، فإن مجموعة البتات النهائية المقلوبة filter_bitset
هي [0, 1, 0, 1, 0, 1, 0, 1]
، كما في الحالة الثانية.
أما بالنسبة إلى مجموعة البتات المحذوفة del_bitset
، نظرًا لأن الكيانين 7 و 8 قد تم حذفهما بالفعل عند ts = 350
، وبالتالي، فإن نتيجة del_bitset
هي [0, 0, 0, 0, 0, 0, 1, 1]
.
الآن لدينا مجموعتا بت بعد السفر عبر الزمن وتصفية السمات: filter_bitset
[0, 1, 0, 1, 0, 1, 0, 1]
و del_bitset
[0, 0, 0, 0, 0, 0, 1, 1]
. اجمع بين مجموعتي البت هاتين مع عامل المنطق الثنائي OR
. النهائي result_bitset
هو [0, 1, 0, 1, 0, 1, 1, 1]
. وهذا يعني أنه سيتم حساب الكيانات [1، 3، 5] فقط في مرحلة البحث أو الاستعلام التالية.
الشكل 3. البحث مع السفر عبر الزمن = 350.
ما التالي
الآن بعد أن عرفت كيف تعمل مجموعات البتات في ميلفوس، قد ترغب أيضًا بـ
- تعلّم كيفية استخدام السلاسل لتصفية نتائج البحث، أو راجع البحث الهجين في مستنداتنا.
- فهم كيفية معالجة البيانات في ملفوس.