🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
  • Home
  • Blog
  • كيف تمكّن Bitset تعدد استخدامات البحث عن التشابه المتجهي

كيف تمكّن Bitset تعدد استخدامات البحث عن التشابه المتجهي

  • Engineering
February 14, 2022
Yudong Cai

Bitset Cover Image صورة غلاف Bitset

بقلم يودونغ كاي وأنجيلا ني.

يتم توفير العديد من الميزات الأساسية الجديدة لقاعدة بيانات المتجهات مع إصدار Milvus 2.0. من بين الميزات الجديدة، ترتبط عمليات السفر عبر الزمن وتصفية السمات والحذف حيث يتم تحقيق هذه الميزات الثلاث من خلال آلية واحدة مشتركة - مجموعة البتات.

لذلك، تهدف هذه المقالة إلى توضيح مفهوم البتات في Milvus وشرح كيفية عملها لدعم عمليات الحذف والسفر عبر الزمن وتصفية السمات مع ثلاثة أمثلة.

ما هي مجموعة البتات؟

مجموعة البتات هي مصفوفة من أرقام البتات ("0" و"1") التي يمكن استخدامها لتمثيل معلومات بيانات معينة. باستخدام مجموعات البتات، يمكنك تخزين أنواع معينة من البيانات بشكل مضغوط وفعال بدلاً من تخزينها في Ints أو عوامات أو أحرف. تعمل مجموعات البتات على المنطق المنطقي، حيث تكون قيمة المخرجات إما صالحة أو غير صالحة، وعادةً ما يُشار إليها بـ "1" و "0" على التوالي. يرمز "1" إلى صالح و"0" إلى غير صالح. نظرًا لأن مجموعات البتات ذات كفاءة عالية ويمكنها حفظ التخزين، يمكن استخدامها أيضًا لتحقيق العديد من الميزات مثل تصفية السمات وعمليات الحذف وعمليات السفر عبر الزمن وغيرها.

بدءًا من الإصدار 0.7.0، تم إدخال مفهوم مجموعة البتات في Milvus لتمكين وظيفة الحذف. وبشكل أكثر تحديدًا، تُستخدم مجموعة البتات لتمييز ما إذا كان كل صف في المقطع محذوفًا. يتم تمييز الكيانات المحذوفة ب "1" في مجموعة البتات المقابلة، ونتيجة لذلك، لن يتم حساب الكيانات المحذوفة أثناء البحث أو الاستعلام.

في إصدار ميلفوس 2.0، تم توسيع تطبيق مجموعة البتات لتمكين المزيد من الميزات، مثل تصفية السمات والسفر عبر الزمن. يبقى المبدأ العام في مجموعة البتات كما هو. أي أنه إذا تم تمييز كيان ما بعلامة "1" في مجموعة البتات المقابلة، فسيتم تجاهل الكيان أثناء البحث أو الاستعلام. تُستخدم مجموعات البت لتمكين 3 ميزات في ميلفوس:

  • تصفية السمات
  • حذف البيانات
  • الاستعلام مع السفر عبر الزمن

كيف تعمل مجموعة البتات في ملفوس؟

تُستخدم الأمثلة أدناه لتوضيح كيفية عمل البتات في ملفوس.

المتطلبات الأساسية

لنفترض أن هناك مقطعًا يحتوي على ثمانية كيانات وسلسلة من أحداث لغة معالجة البيانات (DML) تحدث بالترتيب الموضح في الشكل أدناه.

  • يتم إدراج أربعة من الكيانات، التي primary_keys هي [1، 2، 3، 4] على التوالي، عندما يساوي الطابع الزمني ts 100.
  • يتم إدراج الكيانات الأربعة المتبقية، التي primary_keys هي [5، 6، 7، 8]، عندما يساوي الطابع الزمني ts 200.
  • يتم حذف الكيانات التي primary_keys هي [7، 8] عندما يساوي الطابع الزمني ts 300.
  • فقط الكيانات التي تكون primary_keys هي [1، 3، 5، 7] تستوفي شروط تصفية السمات.

DML events أحداث DML

الحالة الأولى

لنفترض أن القيمة التي يحددها المستخدم لـ time_travel هي 150. وبعبارة أخرى، يجري المستخدم استعلامًا على البيانات المخزنة في ميلفوس عندما يكون ts = 150. يوضح الشكل 1 عملية توليد مجموعة البتات.

أثناء مرحلة التصفية الأولية، يجب أن تكون نتيجة filter_bitset [1، 0، 1، 1، 0، 1، 0، 0، 1، 1، 0] حيث أن الكيانات [1، 3، 5، 7] هي نتائج تصفية صالحة ومحددة بـ "1" في مجموعة البتات. ومع ذلك، لم يتم حتى إدراج الكيانات [4، 5، 6، 7] في قاعدة بيانات المتجهات عندما ts يساوي 150. لذلك، يجب وضع علامة "0" على هذه الكيانات الأربعة بغض النظر عن شرط التصفية. الآن يجب أن تكون نتيجة مجموعة البتات [1، 0، 0، 1، 0، 0، 0، 0، 0، 0، 0]. نظرًا لأن المبدأ العام لحساب مجموعة البتات في Milvus هو أن الكيانات التي تم وضع علامة "1" عليها في مجموعة البتات يتم تجاهلها أثناء البحث أو الاستعلام، فإن نتيجة مجموعة البتات بعد تصفية الوقت وتصفية السمات يجب أن يتم قلبها لكي يتم دمجها مع الصورة النقطية للحذف. يجب أن تكون النتيجة المقلوبة filter_bitset [0، 1، 1، 0، 1، 1، 1، 1، 1، 1، 1].

أما بالنسبة إلى مجموعة بتات الحذف del_bitset ، فيجب أن تكون القيمة الأولية [0، 0، 0، 0، 0، 0، 0، 0، 0، 1، 1، 1]. ومع ذلك، لا يتم حذف الكيانين 7 و8 حتى ts هو 300. لذلك، عندما يكون ts 150، فإن الكيانين 7 و8 لا يزالان صالحين. نتيجة لذلك، يجب أن تكون قيمة del_bitset بعد السفر عبر الزمن [0، 0، 0، 0، 0، 0، 0، 0، 0، 0، 0، 0، 0].

الآن لدينا مجموعتا بتات بعد السفر عبر الزمن وتصفية السمة: filter_bitset [0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1] و del_bitset [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]. اجمع بين مجموعتي البت هاتين مع عامل المنطق الثنائي "OR". تكون القيمة النهائية result_bitset هي [0، 1، 1، 0، 0، 1، 1، 1، 1، 1، 1]. وهذا يعني أنه سيتم حساب الكيانين 1 و3 فقط في مرحلة البحث أو الاستعلام التالية.

Figure 1 الشكل 1

الحالة الثانية

لنفترض أن القيمة التي يحددها المستخدم لـ time_travel هي 250. وبعبارة أخرى، يجري المستخدم استعلامًا عن البيانات المخزنة في ميلفوس عندما يكون ts = 250. يوضح الشكل 2 عملية توليد مجموعة البتات.

كما في الحالة الأولى، يجب أن تكون النتيجة filter_bitset لمرحلة تصفية السمة الأولية [1، 0، 1، 1، 0، 1، 1، 0، 0، 1، 0].

يتم إدراج جميع الكيانات [1، 2، 3، 3، 4، 5، 6، 7، 8] في قاعدة بيانات المتجهات عندما ts= 250. وبالتالي، تظل النتيجة السابقة filter_bitset كما هي. مرة أخرى، نحتاج إلى قلب نتيجة filter_bitset ، وسنحصل على [0، 1، 1، 0، 0، 1، 0، 1، 0، 0، 1].

أما بالنسبة لمجموعة بتات الحذف del_bitset ، يجب أن تكون القيمة الأولية [0، 0، 0، 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، 0، 0، 0، 0، 0].

الآن لدينا مجموعتا بتات بعد السفر عبر الزمن وتصفية السمة: filter_bitset [0، 1، 0، 0، 0، 1، 0، 0، 0، 0، 1] و del_bitset [0، 0، 0، 0، 0، 0، 0، 0، 0، 0، 0، 0، 0]. اجمع بين مجموعتي البت هاتين مع عامل المنطق الثنائي "OR". تكون القيمة النهائية result_bitset هي [0، 1، 0، 0، 1، 0، 0، 1، 0، 0، 1]. أي أنه سيتم حساب الكيانات [1، 3، 5، 7] فقط في مرحلة البحث أو الاستعلام التالية.

Figure 2 الشكل 2

الحالة الثالثة

لنفترض أن القيمة التي يحددها المستخدم لـ time_travel هي 350. بعبارة أخرى، يجري المستخدم استعلامًا عن البيانات المخزنة في ميلفوس عندما يكون ts = 350. يوضح الشكل 3 عملية توليد مجموعة البتات.

كما في الحالتين الأولى والثانية، تكون النتيجة filter_bitset لمرحلة تصفية السمة الأولية هي [0، 1، 0، 0، 1، 0، 0، 1، 0، 0، 1].

يتم إدراج جميع الكيانات [1، 2، 3، 3، 4، 5، 6، 7، 8] في قاعدة بيانات المتجهات عندما ts= 350. لذلك، تكون النتيجة النهائية المقلوبة filter_bitset هي [0، 1، 1، 0، 0، 1، 0، 1، 0، 0، 1]، كما في الحالة الثانية.

أما بالنسبة إلى مجموعة بتات الحذف del_bitset ، نظرًا لأن الكيانين 7 و8 قد حُذفا بالفعل عندما ts= 350، لذلك، يجب أن تكون النتيجة del_bitset [0، 0، 0، 0، 0، 0، 0، 0، 1، 1].

لدينا الآن مجموعتا بتات بعد السفر عبر الزمن وتصفية السمات: filter_bitset [0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1] و del_bitset [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]. اجمع بين مجموعتي البت هاتين مع عامل المنطق الثنائي "OR". تكون القيمة النهائية result_bitset هي [0، 1، 0، 0، 1، 0، 0، 1، 1، 1، 1]. وهذا يعني أنه سيتم حساب الكيانات [1، 3، 5] فقط في مرحلة البحث أو الاستعلام التالية.

Figure 3 الشكل 3

ما التالي؟

نهدف في مدونة سلسلة الميزات الجديدة 2.0 إلى شرح تصميم الميزات الجديدة. اقرأ المزيد في سلسلة المدونة هذه!

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

استمر في القراءة