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

milvus-logo
LFAI
  • Home
  • Blog
  • فهم مستوى الاتساق في قاعدة بيانات ناقلات ميلفوس - الجزء الثاني

فهم مستوى الاتساق في قاعدة بيانات ناقلات ميلفوس - الجزء الثاني

  • Engineering
September 13, 2022
Jiquan Long

Cover_image صورة_الغلاف

كتب هذه المقالة جيكوان لونج ونسختها أنجيلا ني.

في المدونة السابقة حول الاتساق، شرحنا في المدونة السابقة ما هو مدلول الاتساق في قاعدة البيانات المتجهة الموزعة، وغطينا مستويات الاتساق الأربعة - القوي، والثبات المحدود، والجلسة، والنهائي المدعوم في قاعدة بيانات ميلفوس المتجهة، وشرحنا سيناريو التطبيق الأنسب لكل مستوى من مستويات الاتساق.

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

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

آلية التجزئة الزمنية الأساسية

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

timetick timetick

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

ضمان الطابع الزمني

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

بالإضافة إلى ServiceTime ، تعتمد ميلفوس أيضًا نوعًا من الطابع الزمني - الطابع الزمني المضمون (GuaranteeTS) لتلبية الحاجة إلى مستويات مختلفة من الاتساق والتوافر من قبل مختلف المستخدمين. هذا يعني أنه يمكن لمستخدمي قاعدة بيانات ميلفوس المتجهة تحديد GuaranteeTs من أجل إبلاغ عقد الاستعلام بأن جميع البيانات قبل GuaranteeTs يجب أن تكون مرئية ومشاركة عند إجراء بحث أو استعلام.

هناك عادةً سيناريوهان عندما تنفذ عقدة الاستعلام طلب بحث في قاعدة بيانات ميلفوس المتجهة.

السيناريو 1: تنفيذ طلب البحث على الفور

كما هو موضح في الشكل أدناه، إذا كان GuaranteeTs أصغر من ServiceTime ، يمكن لعُقد الاستعلام تنفيذ طلب البحث على الفور.

execute_immediately تنفيذ_فوراً

السيناريو 2: انتظر حتى "وقت الخدمة> ضمانات"

إذا كان GuaranteeTs أكبر من ServiceTime ، يجب أن تستمر عقد الاستعلام في استهلاك علامة الوقت من قائمة انتظار الرسائل. لا يمكن تنفيذ طلبات البحث حتى يصبح ServiceTime أكبر من GuaranteeTs.

wait_search انتظار_البحث

مستويات الاتساق

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

GuaranteeTs في ميلفوس هو تنسيق طابع زمني هجين. وليس لدى المستخدم أي فكرة عن TSO داخل Milvus. لذلك، يعد تحديد قيمةGuaranteeTs مهمة معقدة للغاية بالنسبة للمستخدمين. ولتوفير العناء على المستخدمين وتوفير تجربة مستخدم مثالية، لا يتطلب Milvus من المستخدمين سوى اختيار مستوى الاتساق المحدد، وستتعامل قاعدة بيانات Milvus المتجهة تلقائيًا مع قيمة GuaranteeTs للمستخدمين. وهذا يعني أن مستخدم Milvus يحتاج فقط إلى الاختيار من بين مستويات الاتساق الأربعة: Strong Bounded و Session و و Eventually. ويتوافق كل مستوى من مستويات الاتساق مع قيمة GuaranteeTs معينة.

ويوضح الشكل أدناه GuaranteeTs لكل مستوى من مستويات الاتساق الأربعة في قاعدة بيانات ميلفوس المتجهة.

guarantee_ts الضمانات

تدعم قاعدة بيانات ميلفوس المتجهة أربعة مستويات من الاتساق:

  • CONSISTENCY_STRONG: يتم تعيين GuaranteeTs إلى نفس قيمة أحدث طابع زمني للنظام، وتنتظر عقد الاستعلام حتى ينتقل وقت الخدمة إلى أحدث طابع زمني للنظام لمعالجة طلب البحث أو الاستعلام.

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

  • CONSISTENCY_BOUNDED: يتم تعيين GuaranteeTs إلى قيمة أصغر نسبيًا من أحدث طابع زمني للنظام، وتبحث عقد الاستعلام على طريقة عرض بيانات أقل تحديثًا بشكل مقبول.

  • CONSISTENCY_SESSION: يستخدم العميل الطابع الزمني لآخر عملية كتابة كـ GuaranteeTs بحيث يمكن لكل عميل على الأقل استرداد البيانات التي تم إدراجها بنفسه.

كيف يمكن ضبط مستوى الاتساق في ميلفوس؟

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

لإجراء بحث تشابه متجه بمستوى الاتساق الذي تريده، ما عليك سوى تعيين قيمة المعلمة consistency_level إما Strong أو Bounded أو Session أو Eventually. إذا لم تقم بتعيين قيمة المعلمة consistency_level ، فسيكون مستوى الاتساق Bounded افتراضيًا. يقوم المثال بإجراء بحث تشابه متجه باستخدام Strong الاتساق.

results = collection.search(
        data=[[0.1, 0.2]], 
        anns_field="book_intro", 
        param=search_params, 
        limit=10, 
        expr=None,
        consistency_level="Strong"
)

إجراء استعلام متجه

على غرار إجراء بحث تشابه متجه، يمكنك تحديد قيمة المعلمة consistency_level عند إجراء استعلام متجه. يُجري المثال إجراء استعلام متجه بتناسق Strong.

res = collection.query(
  expr = "book_id in [2,4,6,8]", 
  output_fields = ["book_id", "book_intro"],
  consistency_level="Strong"
)

ما التالي

مع الإصدار الرسمي لميلفوس 2.1، أعددنا سلسلة من المدونات التي تقدم الميزات الجديدة. اقرأ المزيد في سلسلة المدونات هذه:

Like the article? Spread the word

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