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

milvus-logo
LFAI
  • Home
  • Blog
  • كيف تفهم قاعدة البيانات استعلامك وتنفذه؟

كيف تفهم قاعدة البيانات استعلامك وتنفذه؟

  • Engineering
May 05, 2022
Milvus

Cover image صورة الغلاف

هذه المقالة من تأليف أنجيلا ني.

الاستعلام عن المتجهات في ميلفوس هو عملية استرجاع المتجهات عن طريق التصفية العددية القائمة على التعبير المنطقي. باستخدام التصفية القياسية، يمكن للمستخدمين تقييد نتائج استعلامهم بشروط معينة مطبقة على سمات البيانات. على سبيل المثال، إذا استفسر المستخدم عن الأفلام التي صدرت خلال الفترة 1990-2010 والتي حصلت على درجات أعلى من 8.5، فلن تظهر له سوى الأفلام التي تستوفي سماتها (سنة الإصدار والدرجة) الشرط.

يهدف هذا المنشور إلى فحص كيفية إكمال الاستعلام في ميلفوس بدءًا من إدخال تعبير الاستعلام إلى إنشاء خطة الاستعلام وتنفيذ الاستعلام.

الانتقال إلى:

تعبير الاستعلام

يعتمد تعبير الاستعلام مع تصفية السمات في ميلفوس على صيغة EBNF (صيغة باكوس-ناور الموسعة). الصورة أدناه هي قواعد التعبير في ملفوس.

Expression Syntax بناء جملة التعبير

يمكن إنشاء التعبيرات المنطقية باستخدام مجموعة من العوامل المنطقية الثنائية، والعوامل المنطقية الأحادية، والتعبيرات المنطقية، والتعبيرات المنطقية، والتعبيرات المفردة. بما أن بناء الجملة EBNF هو بحد ذاته متكرر، يمكن أن يكون التعبير المنطقي نتيجةً لتركيبة أو جزءًا من تعبير منطقي أكبر. يمكن أن يحتوي التعبير المنطقي على العديد من التعبيرات المنطقية الفرعية. تنطبق القاعدة نفسها في ميلفوس. إذا احتاج المستخدم إلى تصفية سمات النتائج بالعديد من الشروط، يمكن للمستخدم إنشاء مجموعة شروط التصفية الخاصة به من خلال الجمع بين عوامل وتعبيرات منطقية مختلفة.

Boolean expression التعبير المنطقي

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

يتم أيضًا دعم العمليات الحسابية الأساسية مثل الجمع والطرح والضرب والقسمة أثناء الاستعلام في ميلفوس. توضح الصورة التالية أسبقية العمليات. يتم سرد المعاملات من الأعلى إلى الأسفل بأسبقية تنازلية.

Precedence الأسبقية

كيف تتم معالجة تعبير استعلام على أفلام معينة في ملفوس؟

لنفترض أن هناك وفرة من بيانات الأفلام المخزنة في ملفوس ويريد المستخدم الاستعلام عن أفلام معينة. كمثال على ذلك، تحتوي كل بيانات فيلم مخزنة في ملفوس على الحقول الخمسة التالية: معرّف الفيلم، وسنة الإصدار، ونوع الفيلم، والنتيجة، والملصق. في هذا المثال، نوع بيانات معرّف الفيلم وسنة الإصدار هو int64، بينما درجات الفيلم هي بيانات ذات نقاط عائمة. أيضًا، يتم تخزين ملصقات الأفلام بصيغة متجهات النقطة العائمة، ونوع الفيلم بصيغة بيانات السلسلة. وتجدر الإشارة إلى أن دعم نوع بيانات السلسلة هو ميزة جديدة في Milvus 2.1.

على سبيل المثال، إذا أراد المستخدم الاستعلام عن الأفلام ذات الدرجات الأعلى من 8.5. كما يجب أن تكون الأفلام قد صدرت خلال عقد من الزمن قبل عام 2000 إلى عقد بعد عام 2000 أو أن تكون أنواعها إما أفلام كوميدية أو أفلام أكشن، يحتاج المستخدم إلى إدخال التعبير المسند التالي: score > 8.5 && (2000 - 10 < release_year < 2000 + 10 || type in [comedy,action]).

عند استلام تعبير الاستعلام، سيقوم النظام بتنفيذه حسب الأسبقية التالية:

  1. الاستعلام عن الأفلام ذات الدرجات الأعلى من 8.5. تسمى نتائج الاستعلام "نتيجة 1".
  2. احسب 2000 - 10 للحصول على "النتيجة2" (1990).
  3. احسب 2000 + 10 للحصول على "النتيجة3" (2010).
  4. الاستعلام عن الأفلام بقيمة release_year أكبر من "النتيجة2" وأصغر من "النتيجة3". وهذا يعني أن النظام يحتاج إلى الاستعلام عن الأفلام التي تم إصدارها بين عامي 1990 و2010. تسمى نتائج الاستعلام "نتيجة4".
  5. الاستعلام عن الأفلام التي هي إما أفلام كوميدية أو أفلام حركة. تُسمى نتائج الاستعلام "نتيجة5".
  6. اجمع بين "النتيجة4" و"النتيجة5" للحصول على الأفلام التي تم إصدارها بين عامي 1990 و2010 أو التي تنتمي إلى فئة الأفلام الكوميدية أو أفلام الحركة. تسمى النتائج "نتيجة6".
  7. خذ الجزء المشترك في "النتيجة1" و"النتيجة6" للحصول على النتائج النهائية التي تستوفي جميع الشروط.

Film example مثال فيلم

توليد خطة AST

تستفيد Milvus من الأداة مفتوحة المصدر ANTLR (أداة أخرى للتعرّف على اللغة) لتوليد خطة AST (شجرة بناء الجملة المجردة). ANTLR هو مولد محلل قوي لقراءة أو معالجة أو تنفيذ أو ترجمة نص البنية أو الملفات الثنائية. بشكل أكثر تحديدًا، يمكن لـ ANTLR توليد محلل لبناء أشجار التحليل والسير فيها بناءً على بناء أو قواعد محددة مسبقًا. الصورة التالية هي مثال يكون فيه تعبير الإدخال "SP=100؛" تُنشئ LEXER، وهي وظيفة التعرّف على اللغة المدمجة في ANTLR، أربعة رموز لتعبير الإدخال - "SP" و "=" و "100" و "؛". ثم تقوم الأداة بعد ذلك بتحليل الرموز الأربعة لتوليد شجرة التحليل المقابلة.

parse tree شجرة التحليل

تُعد آلية المشي جزءًا مهمًا في أداة ANTLR. وهي مصممة للسير عبر جميع أشجار التحليل لفحص ما إذا كانت كل عقدة تخضع لقواعد النحو، أو للكشف عن بعض الكلمات الحساسة. بعض واجهات برمجة التطبيقات ذات الصلة مدرجة في الصورة أدناه. بما أن ANTLR يبدأ من العقدة الجذرية وينزل إلى الأسفل عبر كل عقدة فرعية وصولاً إلى الأسفل، فلا حاجة للتمييز بين ترتيب كيفية السير عبر شجرة التحليل.

parse tree walker مشي شجرة التحليل

يُنشئ Milvus PlanAST للاستعلام بطريقة مشابهة لـ ANTLR. ومع ذلك، يتطلب استخدام ANTLR إعادة تعريف قواعد بناء الجملة المعقدة نوعًا ما. لذلك، يتبنى Milvus إحدى القواعد الأكثر انتشارًا - قواعد التعبير المنطقي، ويعتمد على حزمة Expr المفتوحة المصدر على GitHub للاستعلام وتحليل بناء جملة تعبيرات الاستعلام.

أثناء الاستعلام مع تصفية السمات، سينشئ ميلفوس شجرة خطة بدائية غير محلولة باستخدام أداة تحليل النملة، وهي طريقة التحليل التي يوفرها Expr، عند استلام تعبير الاستعلام. شجرة الخطة البدائية التي سنحصل عليها هي شجرة ثنائية بسيطة. ثم يتم ضبط شجرة الخطة بواسطة Expr والمحسِّن المدمج في Milvus. المُحسِّن في Milvus مشابه تمامًا لآلية المشي المذكورة أعلاه. ونظرًا لأن وظيفة تحسين شجرة الخطة التي يوفرها Expr متطورة جدًا، يتم تخفيف عبء مُحسِّن Milvus المدمج إلى حد كبير. في النهاية، يقوم المحلل بتحليل شجرة الخطة المحسّنة بطريقة عودية لتوليد AST للخطة في بنية مخازن البروتوكول (protobuf).

plan AST workflow سير عمل AST للخطة

تنفيذ الاستعلام

تنفيذ الاستعلام هو في الأساس تنفيذ AST للخطة التي تم إنشاؤها في الخطوات السابقة.

في ميلفوس، يتم تعريف AST للخطة في بنية البروتوكول. الصورة أدناه هي رسالة مع بنية البروتو. هناك ستة أنواع من التعبيرات، من بينها تعبير ثنائي وتعبير أحادي يمكن أن يكون التعبير المنطقي الثنائي والتعبير المنطقي الأحادي.

protobuf1 بروتوبوف1

protobuf2 بروتوبوف2

الصورة أدناه هي صورة UML لتعبير الاستعلام. وهي توضح الفئة الأساسية والفئة المشتقة لكل تعبير. كل صنف يأتي مع طريقة لقبول معلمات الزائر. هذا هو نمط تصميم الزائر النموذجي. يستخدم Milvus هذا النمط لتنفيذ خطة AST حيث أن أكبر ميزة له هي أن المستخدمين لا يتعين عليهم القيام بأي شيء للتعبيرات البدائية ولكن يمكنهم الوصول مباشرة إلى أحد الأساليب في الأنماط لتعديل فئة تعبير استعلام معينة والعناصر ذات الصلة.

UML UML

عند تنفيذ خطة AST، يتلقى ميلفوس أولاً عقدة خطة من النوع الأولي. Then a segcore-type plan node is obtained via the internal C++ proto parser. عند الحصول على هذين النوعين من عقد الخطة، يقبل Milvus سلسلة من الوصول إلى الفئة ثم يعدل وينفذ في البنية الداخلية لعقد الخطة. أخيرًا، يبحث Milvus في جميع عقد خطة التنفيذ للحصول على النتائج التي تمت تصفيتها. يتم إخراج النتائج النهائية بصيغة قناع البت. قناع البت هو مصفوفة من أرقام البتات ("0" و"1"). يتم تمييز تلك البيانات المستوفية لشروط التصفية على أنها "1" في القناع النقطي، بينما يتم تمييز البيانات التي لا تستوفي المتطلبات على أنها "0" في القناع النقطي.

execute workflow تنفيذ سير العمل

حول سلسلة الغوص العميق

مع الإعلان الرسمي عن توفر الإصدار 2.0 من Milvus 2.0 بشكل عام، قمنا بتنظيم سلسلة مدونات Milvus Deep Dive هذه لتقديم تفسير متعمق لبنية Milvus ورمز المصدر. تشمل الموضوعات التي تتناولها سلسلة المدونات هذه ما يلي:

Try Managed Milvus for Free

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

Get Started

Like the article? Spread the word

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