الأسئلة الشائعة حول الأداء
كيف يتم تعيين nlist
و nprobe
لفهارس IVF؟
الإعداد nlist
خاص بالسيناريو. وكقاعدة عامة، فإن القيمة الموصى بها nlist
هي 4 × sqrt(n)
، حيث n
هو إجمالي عدد الكيانات في المقطع.
يتم تحديد حجم كل مقطع بواسطة المعلمة datacoord.segment.maxSize
، والتي يتم تعيينها إلى 512 ميجابايت افتراضيًا. يمكن تقدير العدد الإجمالي للكيانات في المقطع n بقسمة datacoord.segment.maxSize
على حجم كل كيان.
إن تحديد nprobe
خاص بمجموعة البيانات والسيناريو، ويتضمن مفاضلة بين الدقة وأداء الاستعلام. نوصي بإيجاد القيمة المثالية من خلال التجريب المتكرر.
الرسوم البيانية التالية هي نتائج اختبار تم إجراؤه على مجموعة بيانات sift50m وفهرس IVF_SQ8، والذي يقارن بين الاستدعاء وأداء الاستعلام لأزواج مختلفة nlist
/nprobe
.
اختبار الدقة
اختبار الأداء اختبار الأداء
لماذا تستغرق الاستعلامات أحيانًا وقتًا أطول على مجموعات البيانات الأصغر؟
تُجرى عمليات الاستعلام على شرائح. تقلل الفهارس من الوقت الذي يستغرقه الاستعلام عن مقطع ما. إذا لم تتم فهرسة مقطع ما، يلجأ برنامج Milvus إلى البحث بالقوة الغاشمة على البيانات الخام - مما يزيد من وقت الاستعلام بشكل كبير.
لذلك، عادةً ما يستغرق الاستعلام عن مجموعة بيانات صغيرة (مجموعة) وقتًا أطول لأنه لم يتم إنشاء فهرس لها. ويرجع ذلك إلى عدم وصول أحجام شرائحه إلى عتبة بناء الفهرس التي حددها rootCoord.minSegmentSizeToEnableindex
. اتصل بـ create_index()
لإجبار ميلفوس على فهرسة المقاطع التي وصلت إلى العتبة ولكن لم تتم فهرستها تلقائيًا بعد، مما يحسن أداء الاستعلام بشكل كبير.
ما هي العوامل التي تؤثر على استخدام وحدة المعالجة المركزية؟
يزداد استخدام وحدة المعالجة المركزية عندما يقوم ميلفوس ببناء الفهارس أو تشغيل الاستعلامات. بشكل عام، يكون إنشاء الفهرس مكثفًا لوحدة المعالجة المركزية إلا عند استخدام Annoy، الذي يعمل على مؤشر ترابط واحد.
عند تشغيل الاستعلامات، يتأثر استخدام وحدة المعالجة المركزية nq
و nprobe
. عندما يكون nq
و nprobe
صغيرًا، يكون التزامن منخفضًا ويظل استخدام وحدة المعالجة المركزية منخفضًا.
هل يؤثر إدراج البيانات والبحث في نفس الوقت على أداء الاستعلام؟
عمليات الإدراج ليست كثيفة الاستخدام لوحدة المعالجة المركزية. ومع ذلك، نظرًا لأن المقاطع الجديدة قد لا تصل إلى الحد الأدنى لبناء الفهرس، يلجأ ميلفوس إلى البحث بالقوة الغاشمة - مما يؤثر بشكل كبير على أداء الاستعلام.
تحدد المعلمة rootcoord.minSegmentSizeToEnableIndex
عتبة بناء الفهرس للمقطع، ويتم تعيينها إلى 1024 صفًا افتراضيًا. راجع تكوين النظام لمزيد من المعلومات.
هل يمكن أن تؤدي فهرسة حقل VARCHAR إلى تحسين سرعة الحذف؟
يمكن أن تؤدي فهرسة حقل VARCHAR إلى تسريع عمليات "الحذف حسب التعبير"، ولكن في ظل ظروف معينة فقط:
- الفهرس المقلوب: يساعد هذا الفهرس في فهرسة
IN
أو==
التعبيرات على حقول VARCHAR غير الأساسية. - الفهرس الثلاثي: يساعد هذا الفهرس في استعلامات البادئة (على سبيل المثال،
LIKE prefix%
) على حقول VARCHAR غير أساسية.
ومع ذلك، لا تؤدي فهرسة حقل VARCHAR إلى تسريع عملية الفهرسة:
- الحذف حسب المعرفات: عندما يكون حقل VARCHAR هو المفتاح الأساسي.
- التعبيرات غير المرتبطة: عندما لا يكون حقل VARCHAR جزءًا من تعبير الحذف.
هل لا تزال لديك أسئلة؟
يمكنك ذلك:
- الاطلاع على Milvus على GitHub. لا تتردد في طرح الأسئلة ومشاركة الأفكار ومساعدة الآخرين.
- انضم إلى قناة Slack الخاصة بنا للحصول على الدعم والتفاعل مع مجتمعنا مفتوح المصدر.