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

milvus-logo
LFAI
  • Home
  • Blog
  • استخدام قاعدة بيانات متجهات ميلفوس للاستعلام في الوقت الحقيقي

استخدام قاعدة بيانات متجهات ميلفوس للاستعلام في الوقت الحقيقي

  • Engineering
April 11, 2022
Xi Ge

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

هذا المقال بقلم شي جي ونقلته أنجيلا ني.

في المنشور السابق، تحدثنا في المنشور السابق عن إدراج البيانات واستمرار البيانات في ميلفوس. في هذه المقالة، سنستمر في شرح كيفية تفاعل المكونات المختلفة في ميلفوس مع بعضها البعض لإكمال الاستعلام عن البيانات في الوقت الحقيقي.

بعض الموارد المفيدة قبل البدء مدرجة أدناه. نوصي بقراءتها أولاً لفهم الموضوع في هذا المنشور بشكل أفضل.

تحميل البيانات إلى عقدة الاستعلام

قبل تنفيذ الاستعلام، يجب تحميل البيانات إلى عقد الاستعلام أولاً.

هناك نوعان من البيانات التي يتم تحميلها إلى عقدة الاستعلام: البيانات المتدفقة من وسيط السجل، والبيانات التاريخية من تخزين الكائنات (وتسمى أيضًا التخزين الدائم أدناه).

Flowchart المخطط الانسيابي

منسق البيانات هو المسؤول عن التعامل مع البيانات المتدفقة التي يتم إدراجها باستمرار في ميلفوس. عندما يقوم مستخدم Milvus بالاتصال على collection.load() لتحميل مجموعة، يقوم منسق الاستعلام بالاستعلام عن منسق البيانات لمعرفة المقاطع التي تم إدراجها باستمرار في التخزين ونقاط التفتيش المقابلة لها. نقطة التفتيش هي علامة للدلالة على أن المقاطع المستمرة قبل نقاط التفتيش مستهلكة بينما تلك التي تلي نقطة التفتيش ليست كذلك.

بعد ذلك، يقوم منسق الاستعلام بإخراج إستراتيجية التخصيص بناءً على المعلومات الواردة من منسق البيانات: إما حسب المقطع أو حسب القناة. يكون مخصص المقطع مسؤولاً عن تخصيص المقاطع في التخزين الدائم (البيانات المجمعة) إلى عقد استعلام مختلفة. على سبيل المثال، في الصورة أعلاه، يقوم مخصص المقطع بتخصيص المقطع 1 و3 (S1، S3) إلى عقدة الاستعلام 1، والمقطع 2 و4 (S2، S4) إلى عقدة الاستعلام 2. يقوم مخصص القناة بتعيين عقد استعلام مختلفة لمشاهدة قنوات معالجة بيانات متعددة (DMChannels) في وسيط السجل. على سبيل المثال، في الصورة أعلاه، يقوم مخصص القناة بتعيين عقدة الاستعلام 1 لمشاهدة القناة 1 (Ch1)، وعقدة الاستعلام 2 لمشاهدة القناة 2 (Ch2).

باستخدام استراتيجية التخصيص، تقوم كل عقدة استعلام بتحميل بيانات المقطع ومشاهدة القنوات وفقًا لذلك. في عقدة الاستعلام 1 في الصورة، يتم تحميل البيانات التاريخية (بيانات الدُفعات) عبر S1 و S3 المخصصين من التخزين الدائم. في هذه الأثناء، تقوم عقدة الاستعلام 1 بتحميل البيانات الإضافية (بيانات الدفق) عن طريق الاشتراك في القناة 1 في وسيط السجل.

إدارة البيانات في عقدة الاستعلام

تحتاج عقدة الاستعلام إلى إدارة كل من البيانات التاريخية والتزايدية. يتم تخزين البيانات التاريخية في قطاعات مغلقة بينما يتم تخزين البيانات الإضافية في قطاعات متزايدة.

إدارة البيانات التاريخية

هناك اعتباران أساسيان لإدارة البيانات التاريخية: توازن التحميل وتجاوز فشل عقدة الاستعلام.

Load balance توازن التحميل

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

Query node failover تجاوز فشل عقدة الاستعلام

هناك حالة محتملة أخرى موضحة في الصورة أعلاه. تعطلت إحدى العقد، عقدة الاستعلام 4، فجأة. في هذه الحالة، يجب نقل الحمل (المقاطع المخصصة لعقدة الاستعلام 4) إلى عقد استعلام عاملة أخرى لضمان دقة نتائج الاستعلام.

إدارة البيانات التزايدية

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

بعد تصفيتها، يتم إدراج البيانات الإضافية في أجزاء متزايدة، ويتم تمريرها إلى عقدة وقت الخادم.

Flowgraph مخطط التدفق

أثناء إدراج البيانات، يتم تعيين طابع زمني لكل رسالة إدراج. في قناة DMChannel الموضحة في الصورة أعلاه، يتم إدراج البيانات بالترتيب، من اليسار إلى اليمين. الطابع الزمني لرسالة الإدراج الأولى هو 1، والثانية 2، والثالثة 6. الرسالة الرابعة المميزة باللون الأحمر ليست رسالة إدراج، بل هي رسالة مؤقتة. هذا للدلالة على أن البيانات المدرجة التي تكون طوابعها الزمنية أصغر من هذا الطابع الزمني موجودة بالفعل في وسيط السجل. بعبارة أخرى، يجب أن تحتوي جميع البيانات التي تم إدراجها بعد رسالة النقطة الزمنية هذه على طوابع زمنية تكون قيمها أكبر من هذه النقطة الزمنية. على سبيل المثال، في الصورة أعلاه، عندما تدرك عقدة الاستعلام أن العلامة الزمنية الحالية هي 5، فهذا يعني أن جميع رسائل الإدراج التي تكون قيمة طابعها الزمني أقل من 5 يتم تحميلها جميعًا إلى عقدة الاستعلام.

توفر العقدة الزمنية للخادم قيمة tsafe محدثة في كل مرة تتلقى فيها قيمة الطابع الزمني من عقدة الإدراج. tsafe يعني وقت الأمان، ويمكن الاستعلام عن جميع البيانات التي تم إدراجها قبل هذه النقطة الزمنية. خذ مثالاً، إذا كان tsafe = 9، يمكن الاستعلام عن البيانات المدرجة ذات الطوابع الزمنية الأصغر من 9.

الاستعلام في الوقت الحقيقي في ملفوس

يتم تمكين الاستعلام في الوقت الحقيقي في ميلفوس عن طريق رسائل الاستعلام. يتم إدراج رسائل الاستعلام في وسيط السجل عن طريق الوكيل. ثم تحصل عقد الاستعلام على رسائل الاستعلام من خلال مشاهدة قناة الاستعلام في وسيط السجل.

رسالة الاستعلام

Query message رسالة الاستعلام

تتضمن رسالة الاستعلام المعلومات المهمة التالية حول الاستعلام:

  • msgID: معرف الرسالة، معرف رسالة الاستعلام المعين من قبل النظام.
  • collectionID: معرف المجموعة المراد الاستعلام عنها (إذا تم تحديده من قبل المستخدم).
  • execPlan: تُستخدم خطة التنفيذ بشكل أساسي لتصفية السمات في الاستعلام.
  • service_ts: سيتم تحديث الطابع الزمني للخدمة مع tsafe المذكور أعلاه. يشير الطابع الزمني للخدمة إلى النقطة التي توجد فيها الخدمة. جميع البيانات المدرجة قبل service_ts متاحة للاستعلام.
  • travel_ts: يحدد الطابع الزمني للسفر نطاقًا زمنيًا في الماضي. وسيتم إجراء الاستعلام على البيانات الموجودة في الفترة الزمنية المحددة بواسطة travel_ts.
  • guarantee_ts: : يحدد الطابع الزمني للضمان فترة زمنية يجب إجراء الاستعلام بعدها. سيتم إجراء الاستعلام فقط عندما service_ts > guarantee_ts.

الاستعلام في الوقت الحقيقي

Query process عملية الاستعلام

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

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

يتم دفع نتائج الاستعلام في النهاية إلى قناة النتائج. يحصل الوكيل على نتائج الاستعلام من تلك القناة. وبالمثل، سيقوم الوكيل بإجراء "تقليل عام" أيضًا لأنه يتلقى النتائج من عقد استعلام متعددة وقد تكون نتائج الاستعلام متكررة.

للتأكد من أن الوكيل قد تلقى جميع نتائج الاستعلام قبل إعادتها إلى SDK، ستحتفظ رسالة النتائج أيضًا بسجل للمعلومات بما في ذلك المقاطع المختومة التي تم البحث عنها وقنوات DMChannels التي تم البحث عنها والمقاطع المختومة العالمية (جميع المقاطع في جميع عقد الاستعلام). يمكن للنظام أن يستنتج أن الوكيل قد تلقى جميع نتائج الاستعلام فقط في حالة استيفاء الشرطين التاليين

  • اتحاد جميع المقاطع المختومة التي تم البحث عنها المسجلة في جميع رسائل النتائج أكبر من المقاطع المختومة العالمية,
  • تم الاستعلام عن جميع قنوات DMChannels في المجموعة.

في النهاية، يقوم الوكيل بإرجاع النتائج النهائية بعد "الاختزال العام" إلى مجموعة أدوات تطوير البرمجيات Milvus SDK.

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

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

Like the article? Spread the word

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