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

milvus-logo
LFAI
الصفحة الرئيسية
  • دليل الإدارة
  • Home
  • Docs
  • دليل الإدارة

  • تحسين التخزين

  • ضغط التكتلات

ضغط التجميع

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

نظرة عامة

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

Without clustering Compaction بدون ضغط التجميع

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

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

With Clustering Compaction مع ضغط التجميع

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

استخدام ضغط التجميع

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

التكوين العام

تحتاج إلى تعديل ملف تكوين Milvus كما هو موضح أدناه.

dataCoord:
  compaction:
    clustering:
      enable: true 
      autoEnable: false 
      triggerInterval: 600 
      minInterval: 3600 
      maxInterval: 259200 
      newDataSizeThreshold: 512m 
      timeout: 7200
     
queryNode:
  enableSegmentPrune: true 

datanode:
  clusteringCompaction:
    memoryBufferRatio: 0.1 
    workPoolSize: 8  
common:
  usePartitionKeyAsClusteringKey: true 
  • dataCoord.compaction.clustering

    عنصر التكوينالوصفالقيمة الافتراضية
    enableتحديد ما إذا كان سيتم تمكين ضغط التجميع أم لا.
    تعيين هذا إلى true إذا كنت بحاجة إلى تمكين هذه الميزة لكل مجموعة لها مفتاح تجميع.
    false
    autoEnableتحديد ما إذا كنت تريد تمكين الضغط الذي يتم تشغيله تلقائياً.
    يشير تعيين هذا إلى true إلى أن Milvus يقوم بضغط المجموعات التي تحتوي على مفتاح تجميع في الفواصل الزمنية المحددة.
    false
    triggerIntervalيحدد الفاصل الزمني بالمللي ثانية الذي يبدأ عنده Milvus ضغط التجميع.
    هذه المعلمة صالحة فقط عندما يتم تعيين autoEnable إلى true.
    -
    minIntervalيحدد الحد الأدنى للفاصل الزمني بالثواني.
    هذه المعلمة صالحة فقط عندما يتم تعيين autoEnable إلى true.
    يساعد تعيين هذه المعلمة على عدد صحيح أكبر من المشغّلInterval على تجنب عمليات التجميع المتكررة خلال فترة قصيرة.
    -
    maxIntervalيحدد الحد الأقصى للفاصل الزمني بالثواني.
    هذه المعلمة صالحة فقط عندما يتم تعيين autoEnable إلى true.
    بمجرد أن يكتشف Milvus أن المجموعة لم يتم تجميعها لمدة أطول من هذه القيمة، فإنه يفرض تجميعًا مضغوطًا.
    -
    newDataSizeThresholdيحدد العتبة العليا لتشغيل ضغط التجميع.
    هذه المعلمة صالحة فقط عندما يتم تعيين autoEnable على true.
    بمجرد أن يكتشف Milvus أن حجم البيانات في مجموعة ما يتجاوز هذه القيمة، فإنه يبدأ عملية ضغط التجميع.
    -
    timeoutيحدد مدة المهلة لضغط التجميع.
    تفشل عملية ضغط التجميع إذا تجاوز وقت تنفيذها هذه القيمة.
    -
  • queryNode

    عنصر التكوينالوصفالقيمة الافتراضية
    enableSegmentPruneتحديد ما إذا كان Milvus يقوم بتشذيب البيانات بالرجوع إلى PartitionStats عند تلقي طلبات البحث/الاستعلام.
    تعيين هذا إلى true يُمكّن Milvus من تشذيب البيانات غير ذات الصلة من المقاطع أثناء طلب البحث/الاستعلام.
    false
  • dataNode.clusteringCompaction

    عنصر التكوينالوصفالقيمة الافتراضية
    memoryBufferRatioتحديد نسبة المخزن المؤقت للذاكرة لمهام ضغط المجموعات.
    يقوم Milvus بمسح البيانات عندما يتجاوز حجم البيانات حجم المخزن المؤقت المخصص المحسوب باستخدام هذه النسبة.
    -
    workPoolSizeتحديد حجم تجمع العاملين لمهمة ضغط التجميع.-
  • common

    عنصر التكوينالوصفالقيمة الافتراضية
    usePartitionKeyAsClusteringKeyتحديد ما إذا كان سيتم استخدام مفتاح القسم في المجموعات كمفتاح تجميع.
    يشير تعيين هذا إلى true إلى استخدام مفتاح التقسيم كمفتاح تجميع.
    يمكنك دائماً تجاوز هذا الإعداد في مجموعة من خلال تعيين مفتاح التجميع بشكل صريح.
    false

لتطبيق التغييرات المذكورة أعلاه على مجموعة Milvus الخاصة بك، يُرجى اتباع الخطوات الواردة في تكوين Milvus مع Helm وتكوين Milvus مع مشغلي Milvus.

تكوين التجميع

لضغط التجميع في مجموعة معينة، يجب عليك تحديد حقل قياسي من المجموعة كمفتاح التجميع.

default_fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="key", dtype=DataType.INT64, is_clustering_key=True),
    FieldSchema(name="var", dtype=DataType.VARCHAR, max_length=1000, is_primary=False),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim)
]

default_schema = CollectionSchema(
    fields=default_fields, 
    description="test clustering-key collection"
)

coll1 = Collection(name="clustering_test", schema=default_schema)

يمكنك استخدام الحقول القياسية لأنواع البيانات التالية كمفتاح التجميع: Int8 و Int16 و و Int32 و Int64 و Float و Double و VarChar.

تشغيل ضغط التجميع التجميعي

إذا قمت بتمكين الضغط التجميعي التلقائي للتجميع، يقوم برنامج Milvus تلقائيًا بتشغيل الضغط في الفاصل الزمني المحدد. بدلاً من ذلك، يمكنك تشغيل الضغط يدويًا على النحو التالي:

coll1.compact(is_clustering=True)
coll1.get_compaction_state(is_clustering=True)
coll1.wait_for_compaction_completed(is_clustering=True)

اختبار معياري

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

يتم إجراء الاختبار المعياري على مجموعة تحتوي على كيانات من مجموعة بيانات LAION ذات 20 مليونًا و768 بُعدًا مع تعيين الحقل الرئيسي كمفتاح تجميع. بعد تشغيل ضغط التجميع في المجموعة، يتم إرسال عمليات البحث المتزامنة حتى يصل استخدام وحدة المعالجة المركزية إلى مستوى عالٍ من وحدة المعالجة المركزية.

مرشح البحث نسبة التقليم الكمون (مللي ثانية) QPS (طلبات/ثانية)
متوسط الحد الأدنى الحد الأقصى المتوسط TP99
لا يوجد 0% 1685 672 2294 1710 2291 17.75
مفتاح > 200 ومفتاح < 800 40.2% 1045 47 1828 1085 1617 28.38
مفتاح > 200 ومفتاح < 600 59.8% 829 45 1483 882 1303 35.78
مفتاح > 200 ومفتاح < 400 79.5% 550 100 985 584 898 54.00
المفتاح = = 1000 99% 68 24 1273 70 246 431.41

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

أفضل الممارسات

إليك بعض النصائح لاستخدام ضغط التجميع بكفاءة:

  • قم بتمكين ذلك للمجموعات ذات أحجام البيانات الكبيرة. يتحسن أداء البحث مع وجود أحجام بيانات أكبر في المجموعة. من الجيد تمكين هذه الميزة للمجموعات التي تحتوي على أكثر من مليون كيان.

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

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

    لاحظ أن هذا الإعداد لا يمنعك من اختيار حقل قياسي آخر كمفتاح تجميع. تكون الأولوية دائمًا لمفتاح التجميع المعين صراحةً.

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟