نظرة عامة على التخزين المتدرجCompatible with Milvus 2.6.4+

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

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

ضع في اعتبارك تمكين التخزين المتدرج في سيناريوهات مثل:

  • المجموعات التي تتجاوز سعة الذاكرة المتاحة أو سعة NVMe لعقدة استعلام واحدة

  • أحمال العمل التحليلية أو أحمال العمل الدفعية حيث يكون التحميل الأسرع أكثر أهمية من زمن انتقال الاستعلام الأول

  • أحمال العمل المختلطة التي يمكن أن تتسامح مع حالات فقدان ذاكرة التخزين المؤقت العرضية للبيانات التي يتم الوصول إليها بشكل أقل تكرارًا

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

  • للمزيد من التفاصيل حول الشرائح والقطع، راجع الشريحة.

كيف يعمل

يغير التخزين المتدرج كيفية إدارة QueryNode لبيانات المقطع. فبدلاً من التخزين المؤقت لكل حقل وفهرس في وقت التحميل، تقوم QueryNode الآن بتحميل البيانات الوصفية فقط وتستخدم طبقة تخزين مؤقت لجلب البيانات وإخلائها ديناميكيًا.

وضع التحميل الكامل مقابل وضع التخزين المتدرج

بينما يتعامل كل من وضعي التحميل الكامل والتخزين المتدرج مع نفس البيانات، إلا أنهما يختلفان في توقيت وكيفية تخزين QueryNode لهذه المكونات مؤقتًا.

  • وضع التحميل الكامل: في وقت التحميل، تقوم QueryNode بتخزين بيانات المجموعة الكاملة مؤقتًا، بما في ذلك البيانات الوصفية وبيانات الحقول والفهارس، من وحدة تخزين الكائنات.

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

يوضح الرسم البياني أدناه هذه الاختلافات.

Full Load Mode Vs Tiered Storage Mode وضع التحميل الكامل مقابل وضع التخزين المتدرج

سير عمل تحميل عقدة الاستعلام

في إطار التخزين المتدرج، يحتوي سير عمل التخزين المتدرج على هذه المراحل:

Querynode Load Workflow سير عمل تحميل عقدة الاستعلام

المرحلة 1: التحميل البطيء

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

لا يتم تخزين بيانات الحقول الفعلية أو ملفات الفهرس مؤقتًا في هذه المرحلة. يسمح هذا للمجموعات بأن تصبح قابلة للاستعلام مباشرةً بعد بدء التشغيل مع الحفاظ على الحد الأدنى من استهلاك الذاكرة والقرص.

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

التكوين

يتم تطبيقها تلقائياً عند تمكين التخزين المتدرج. لا يلزم إعداد يدوي.

المرحلة 2: الإحماء

لتقليل زمن انتقال الضربة الأولى الناتج عن التحميل البطيء، يوفر Milvus آلية الإحماء.

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

أثناء الإحماء، سيتم تحميل الحقول مسبقًا على مستوى القطعة، بينما سيتم تحميل الفهارس مسبقًا على مستوى المقطع.

التكوين

يمكن تكوين الإحماء على ثلاثة مستويات:

  • مستوى الكتلة: تحديد الإعدادات الافتراضية في milvus.yaml التي تنطبق على جميع المجموعات.

  • مستوى المجموعة: تجاوز الإعدادات الافتراضية للمجموعة لمجموعة محددة باستخدام أساليب SDK (create_collection ، alter_collection_properties).

  • مستوى الحقل/مستوى الفهرس: قم بضبط الحقول أو الفهارس الفردية باستخدام أساليب SDK (add_field ، alter_collection_field ، add_index ، alter_index_properties).

تتجاوز إعدادات المستوى الأعلى إعدادات المستوى الأدنى (الحقل/الفهرس > المجموعة > المجموعة). انظر الإحماء للحصول على تكوينات مفصلة.

المرحلة 3: التحميل الجزئي

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

  • الحقول: يتم تحميلها عند الطلب على مستوى القطع. يتم جلب أجزاء البيانات التي تتطابق مع شروط الاستعلام الحالية فقط، مما يقلل من استخدام الإدخال/الإخراج والذاكرة.

  • الفهارس: يتم تحميلها عند الطلب على مستوى القطعة. يجب أن يتم جلب ملفات الفهرس كوحدات كاملة ولا يمكن تقسيمها عبر القطع.

التكوين

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

المرحلة 4: الإخلاء

للحفاظ على الاستخدام الصحي للموارد، يقوم Milvus تلقائيًا بإخلاء البيانات المخزنة مؤقتًا غير المستخدمة عند الوصول إلى عتبات محددة.

يتبع الإخلاء سياسة أقل استخدامًا (LRU) ، مما يضمن إزالة البيانات التي يتم الوصول إليها بشكل غير متكرر أولاً بينما تظل البيانات النشطة في ذاكرة التخزين المؤقت.

يخضع الإخلاء للعناصر التالية القابلة للتكوين:

  • العلامات المائية: تحديد عتبات الذاكرة أو القرص التي تؤدي إلى تشغيل الإخلاء وإيقافه.

  • TTL TTL لذاكرة التخزينالمؤقت: إزالة البيانات المخزنة مؤقتاً القديمة بعد مدة محددة من عدم النشاط.

التكوين

تمكين معلمات الإخلاء وضبطها في milvus.yaml. انظر الإخلاء للحصول على تكوين مفصل.

الشروع في العمل

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

  • ميلفوس 2.6.4+

  • عقد الاستعلام مع ذاكرة وموارد قرص مخصصة

  • خلفية تخزين الكائنات (S3، MinIO، إلخ)

يجب عدم مشاركة موارد عقدة الاستعلام مع أحمال العمل الأخرى. يمكن أن تتسبب الموارد المشتركة في إساءة تقدير السعة المتاحة في التخزين المتدرج مما يؤدي إلى حدوث أعطال.

قالب التكوين الأساسي

تحرير ملف تكوين Milvus (milvus.yaml) لتكوين إعدادات التخزين المتدرج على مستوى المجموعة:

# milvus.yaml
queryNode:
  segcore:
    tieredStorage:
      # Warm Up Configuration
      warmup:
        scalarField: sync      # Preload scalar field data
        scalarIndex: sync      # Preload scalar indexes
        vectorField: disable   # Don't preload vector field data (large)
        vectorIndex: sync      # Preload vector indexes
      
      # Eviction Configuration
      evictionEnabled: true
      backgroundEvictionEnabled: true
      
      # Memory Watermarks
      memoryLowWatermarkRatio: 0.75   # Stop evicting at 75%
      memoryHighWatermarkRatio: 0.80  # Start evicting at 80%
      
      # Disk Watermarks  
      diskLowWatermarkRatio: 0.75
      diskHighWatermarkRatio: 0.80
      
      # Cache TTL (7 days)
      cacheTtl: 604800

يحدد هذا القالب الإعدادات الافتراضية على مستوى المجموعة. يمكنك تجاوز إعدادات الإحماء لمجموعات محددة أو حقول/فهجمات فردية باستخدام SDK. راجع الإحماء للحصول على التفاصيل.

الخطوات التالية

  1. تكوين الإحماء - تحسين التحميل المسبق لأنماط الوصول الخاصة بك. راجع الإحماء.

  2. ضبط الإخلاء - قم بتعيين علامات مائية مناسبة ووقت انتهاء الصلاحية المناسب لقيود الموارد الخاصة بك. راجع الإخلاء.

  3. مراقبة الأداء - تتبع معدلات الوصول إلى ذاكرة التخزين المؤقت، وتكرار الإخلاء، وأنماط زمن انتقال الاستعلام.

  4. تكرار التهيئة - اضبط الإعدادات بناءً على خصائص عبء العمل الملحوظة.

الأسئلة الشائعة

هل يمكنني تغيير معلمات التخزين المتدرج في وقت التشغيل؟

يعتمد ذلك على نوع المعلمة:

  • إعدادات الإحماء: يمكن تكوين الإحماء على مستوى المجموعة وعلى مستوى الحقل/الفهرس عبر SDK قبل تحميل المجموعة. بمجرد تحميل المجموعة، يجب عليك تحريرها أولاً، وتغيير الإعدادات، ثم إعادة التحميل.

  • إعدادات الإخلاء والعلامة المائية: يجب ضبطها في milvus.yaml قبل بدء تشغيل Milvus. تتطلب التغييرات إعادة التشغيل لتصبح سارية المفعول.

هل يؤثر التخزين المتدرج على متانة البيانات؟

لا، لا. لا يزال يتم التعامل مع استمرارية البيانات عن طريق تخزين الكائنات عن بُعد. التخزين المتدرج يدير التخزين المؤقت فقط على عقد الاستعلام.

هل ستكون الاستعلامات أسرع دائمًا مع التخزين المتدرج؟

ليس بالضرورة. يقلل التخزين المتدرج من وقت التحميل واستخدام الموارد، ولكن قد تشهد الاستعلامات التي تلمس البيانات غير المخزنة مؤقتًا (الباردة) زمن استجابة أعلى. بالنسبة لأحمال العمل الحساسة لزمن الاستعلام، يوصى باستخدام وضع التحميل الكامل.

لماذا يستمر نفاد موارد عقدة الاستعلام حتى مع تمكين التخزين المتدرج؟

هناك سببان شائعان:

  • تم تكوين عقدة الاستعلام بموارد قليلة جداً. تعتبر العلامات المائية نسبية بالنسبة للموارد المتاحة، لذا فإن نقص التزويد يزيد من سوء التقدير.

  • تتم مشاركة موارد QueryNode مع أعباء عمل أخرى، لذلك لا يمكن للتخزين المتدرج تقييم السعة الفعلية المتاحة بشكل صحيح.

لحل هذه المشكلة، نوصي بتخصيص موارد مخصصة لعُقد الاستعلام.

لماذا تفشل بعض الاستعلامات في ظل التزامن العالي؟

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

لماذا يزداد زمن انتقال البحث/الاستعلام بعد تمكين التخزين المتدرج؟

تتضمن الأسباب المحتملة ما يلي:

  • الاستعلامات المتكررة للبيانات الباردة، والتي يجب جلبها من التخزين.

  • تعيين علامات مائية قريبة جدًا من بعضها البعض، مما يتسبب في الإخلاء المتزامن المتكرر.