الأسئلة الشائعة حول المنتج
كم تبلغ تكلفة ميلفوس؟
ميلفوس هو مشروع مجاني مفتوح المصدر 100%.
يُرجى الالتزام برخصة أباتشي 2.0 عند استخدام ميلفوس لأغراض الإنتاج أو التوزيع.
كما تقدم شركة Zilliz، الشركة التي تقف وراء Milvus، نسخة سحابية مُدارة بالكامل من المنصة لأولئك الذين لا يرغبون في بناء وصيانة مثيلهم الموزع الخاص بهم. تحافظ Zilliz Cloud تلقائيًا على موثوقية البيانات وتسمح للمستخدمين بالدفع مقابل ما يستخدمونه فقط.
هل يدعم ميلفوس البنى غير x86؟
لا يمكن تثبيت Milvus أو تشغيله على منصات غير x86.
يجب أن تدعم وحدة المعالجة المركزية الخاصة بك إحدى مجموعات التعليمات التالية لتشغيل Milvus: SSE4.2، AVX، AVX2، AVX512. هذه كلها مجموعات تعليمات SIMD مخصصة ل x86.
أين يخزن ميلفوس البيانات؟
يتعامل Milvus مع نوعين من البيانات، البيانات المدرجة والبيانات الوصفية.
يتم تخزين البيانات المدرجة، بما في ذلك البيانات المتجهة، والبيانات القياسية، والمخطط الخاص بالمجموعة، في وحدة تخزين ثابتة كسجل تزايدي. يدعم Milvus العديد من خلفيات تخزين الكائنات، بما في ذلك MinIO وAWS S3 وGoogle Cloud Storage (GCS) وAzure Blob Storage وAlibaba Cloud OSS وTencent Cloud Object Storage (COS).
يتم إنشاء البيانات الوصفية داخل Milvus. تحتوي كل وحدة من وحدات Milvus على البيانات الوصفية الخاصة بها والتي يتم تخزينها في إلخd.
لماذا لا توجد بيانات متجهة في إلخd؟
يخزن إلخd البيانات الوصفية لوحدات Milvus النمطية؛ بينما يخزن MinIO الكيانات.
هل يدعم ميلفوس إدراج البيانات والبحث عنها في نفس الوقت؟
نعم. يتم التعامل مع عمليات الإدراج وعمليات الاستعلام بواسطة وحدتين منفصلتين مستقلتين عن بعضهما البعض. من وجهة نظر العميل، تكتمل عملية الإدراج عندما تدخل البيانات المدرجة في قائمة انتظار الرسائل. ومع ذلك، تكون البيانات المدرجة غير قابلة للبحث حتى يتم تحميلها إلى عقدة الاستعلام. إذا لم يصل حجم المقطع إلى عتبة بناء الفهرس (512 ميغابايت افتراضيًا)، يلجأ ميلفوس إلى البحث بالقوة الغاشمة وقد يتضاءل أداء الاستعلام.
هل يمكن إدراج المتجهات ذات المفاتيح الأساسية المكررة في ملفوس؟
نعم. لا يتحقق ميلفوس مما إذا كانت المفاتيح الأساسية للمتجهات مكررة.
عندما يتم إدراج متجهات بمفاتيح أساسية مكررة، هل يعاملها ميلفوس كعملية تحديث؟
لا. لا يدعم Milvus حالياً عمليات التحديث ولا يتحقق مما إذا كانت المفاتيح الأساسية للكيان مكررة. أنت مسؤول عن التأكد من أن المفاتيح الأساسية للكيان فريدة من نوعها، وإذا لم تكن كذلك فقد يحتوي Milvus على كيانات متعددة بمفاتيح أساسية مكررة.
في حالة حدوث ذلك، تظل نسخة البيانات التي سيتم إرجاعها عند الاستعلام عنها سلوكًا غير معروف. سيتم إصلاح هذا القيد في الإصدارات المستقبلية.
ما هو الحد الأقصى لطول المفاتيح الأساسية للكيانات المعرفة ذاتياً؟
يجب أن تكون المفاتيح الأساسية للكيان أعداداً صحيحة غير سالبة 64 بت.
ما هو الحد الأقصى لكمية البيانات التي يمكن إضافتها لكل عملية إدراج؟
يجب ألا يتجاوز حجم عملية الإدراج 1,024 ميغابايت. هذا حد مفروض من قبل gRPC.
هل يؤثر حجم المجموعة على أداء الاستعلام عند البحث في قسم معين؟
لا، إذا تم تحديد أقسام للبحث، يبحث Milvus في الأقسام المحددة فقط.
هل يحتاج Milvus إلى تحميل المجموعة بأكملها عند تحديد أقسام للبحث؟
يعتمد ذلك على البيانات المطلوبة للبحث. يجب تحميل جميع الأقسام التي يحتمل أن تظهر في نتيجة البحث قبل البحث.
- على سبيل المثال، إذا كنت تريد فقط البحث في قسم (أقسام) محددة، فلن تحتاج إلى تحميل الكل. اتصل على
load_partition()
لتحميل القسم (الأقسام) المقصودة ثم حدد القسم (الأقسام) في استدعاء الأسلوبsearch()
. - إذا كنت ترغب في البحث في جميع الأقسام، اتصل على
load_collection()
لتحميل المجموعة بأكملها بما في ذلك جميع الأقسام. - إذا فشلت في تحميل المجموعة أو قسم (أقسام) محددة قبل البحث، فسيقوم ميلفوس بإرجاع خطأ.
هل يمكن إنشاء فهارس بعد إدراج المتجهات؟
نعم، إذا تم إنشاء فهرس للمجموعة من خلال create_index()
من قبل، سيقوم Milvus تلقائيًا بإنشاء فهرس للمتجهات التي تم إدراجها لاحقًا. ومع ذلك، لا ينشئ Milvus فهرسًا حتى تملأ المتجهات المدرجة حديثًا مقطعًا كاملًا ويكون ملف الفهرس الذي تم إنشاؤه حديثًا منفصلًا عن الملف السابق.
كيف يختلف الفهرسان FLAT و IVF_FLAT؟
يقسم فهرس IVF_FLAT مساحة المتجهات إلى مجموعات قوائم. في قيمة القائمة الافتراضية 16,384 قائمة، يقارن Milvus المسافات بين المتجه الهدف ومراكز جميع المجموعات الـ 16,384 لإرجاع أقرب مجموعات مسبار. ثم يقارن Milvus المسافات بين المتجه الهدف والمتجهات في المجموعات المحددة للحصول على أقرب المتجهات. على عكس IVF_FLAT، يقارن FLAT مباشرةً المسافات بين المتجه الهدف وكل متجه آخر.
عندما يكون العدد الإجمالي للمتجهات يساوي تقريبًا nlist، تكون المسافة بين IVF_FLAT و FLAT قليلة من حيث متطلبات الحساب وأداء البحث. ومع ذلك، عندما يتجاوز عدد المتجهات nlist بمعامل اثنين أو أكثر، يبدأ IVF_FLAT في إظهار مزايا الأداء.
انظر فهرس المتجهات لمزيد من المعلومات.
كيف يقوم ميلفوس بمسح البيانات؟
يُرجع Milvus النجاح عندما يتم إدخال البيانات المدرجة في قائمة انتظار الرسائل. ومع ذلك، لا يتم مسح البيانات بعد إلى القرص. ثم تقوم عقدة بيانات Milvus بكتابة البيانات الموجودة في قائمة انتظار الرسائل إلى التخزين الدائم كسجلات تزايديّة. إذا تم استدعاء flush()
، يتم إجبار عقدة البيانات على كتابة جميع البيانات في قائمة انتظار الرسائل إلى التخزين الدائم على الفور.
ما هو التطبيع؟ لماذا التطبيع مطلوب؟
يشير التطبيع إلى عملية تحويل المتجه بحيث يساوي معياره 1. إذا تم استخدام حاصل الضرب الداخلي لحساب تشابه المتجهات، فيجب تطبيع المتجهات. بعد التطبيع، يساوي حاصل الضرب الداخلي تشابه جيب التمام.
راجع ويكيبيديا لمزيد من المعلومات.
لماذا تعطي المسافة الإقليدية (L2) والضرب الداخلي (IP) نتائج مختلفة؟
بالنسبة للمتجهات المطبعة، تكون المسافة الإقليدية (L2) مكافئة رياضيًا للضرب الداخلي (IP). إذا كانت مقاييس التشابه هذه تعطي نتائج مختلفة، فتحقق مما إذا كانت المتجهات لديك طبيعية
هل هناك حد للعدد الإجمالي للمجموعات والأقسام في Milvus؟
نعم، يمكنك إنشاء ما يصل إلى 65,535 مجموعة في مثيل Milvus. عند حساب عدد المجموعات الموجودة، تحسب Milvus جميع المجموعات التي تحتوي على أجزاء وأقسام فيها.
على سبيل المثال، لنفترض أنك قمت بالفعل بإنشاء 100 مجموعة، مع وجود جزأين و4 أقسام في 60 منها وجزء واحد و12 قسمًا في المجموعات ال 40 المتبقية. يمكن حساب العدد الحالي للمجموعات على النحو التالي:
60 * 2 * 4 + 40 * 1 * 12 = 960
لماذا أحصل على أقل من k ناقلات عند البحث عن topk
ناقلات؟
من بين الفهارس التي يدعمها Milvus، يقوم IVF_FLAT و IVF_SQ8 بتنفيذ طريقة التجميع k-means. يتم تقسيم مساحة البيانات إلى nlist
مجموعات ويتم توزيع المتجهات المدرجة على هذه المجموعات. ثم تختار Milvus بعد ذلك أقرب nprobe
من المجموعات وتقارن المسافات بين المتجه الهدف وجميع المتجهات في المجموعات المختارة لإرجاع النتائج النهائية.
إذا كانت nlist
و topk
كبيرة و nprobe صغيرة، فقد يكون عدد المتجهات في مجموعات nprobe أقل من k
. لذلك، عند البحث عن topk
أقرب المتجهات ، يكون عدد المتجهات التي تم إرجاعها أقل من k
.
لتجنب ذلك، حاول ضبط nprobe
أكبر و nlist
و k
أصغر.
راجع فهرس المتجهات لمزيد من المعلومات.
ما هو الحد الأقصى للبعد المتجه المدعوم في ملفوس؟
يمكن لـ Milvus إدارة متجهات ذات أبعاد تصل إلى 32,768 بُعداً افتراضياً. يمكنك زيادة قيمة Proxy.maxDimension
للسماح بمتجهات ذات أبعاد أكبر.
هل يدعم Milvus وحدة المعالجة المركزية Apple M1؟
لا يدعم الإصدار الحالي من Milvus وحدة المعالجة المركزية Apple M1 مباشرة. بعد الإصدار Milvus 2.3، يوفر Milvus صور Docker لبنية ARM64.
ما هي أنواع البيانات التي يدعمها Milvus في حقل المفتاح الأساسي؟
في الإصدار الحالي، يدعم Milvus كلاً من INT64 والسلسلة.
هل Milvus قابل للتطوير؟
نعم، يمكنك نشر مجموعة Milvus مع عقد متعددة عبر مخطط Helm على Kubernetes. راجع دليل التوسع لمزيد من التعليمات.
ما هو الجزء المتزايد والجزء المختوم؟
عندما يأتي طلب بحث، يبحث ميلفوس في كل من البيانات التزايدية والبيانات التاريخية. البيانات التزايدية هي تحديثات حديثة، يتم تخزينها في المقاطع المتزايدة، والتي يتم تخزينها في الذاكرة قبل أن تصل إلى الحد الأدنى ليتم تثبيتها في تخزين الكائنات ويتم إنشاء فهرس أكثر كفاءة لها، بينما البيانات التاريخية هي تحديثات منذ فترة. وهي في المقاطع المختومة التي تم تخزينها باستمرار في مخزن الكائنات. تشكل البيانات التزايدية والبيانات التاريخية معًا مجموعة البيانات الكاملة للبحث. هذا التصميم يجعل أي بيانات يتم إدخالها إلى ميلفوس قابلة للبحث على الفور. بالنسبة لـ Milvus Distributed، هناك عوامل أكثر تعقيدًا تحدد متى يمكن أن يظهر سجل تم تناوله للتو في نتيجة البحث. تعرف على المزيد من الفروق الدقيقة حول ذلك في مستويات الاتساق.
هل Milvus متاح للبحث المتزامن؟
نعم. بالنسبة للاستعلامات على نفس المجموعة، يبحث Milvus بشكل متزامن في البيانات الإضافية والتاريخية. ومع ذلك، يتم إجراء الاستعلامات على مجموعات مختلفة في سلسلة. في حين أن البيانات التاريخية يمكن أن تكون مجموعة بيانات ضخمة للغاية، فإن عمليات البحث على البيانات التاريخية تستغرق وقتًا أطول نسبيًا ويتم إجراؤها بشكل أساسي في سلسلة.
لماذا تبقى البيانات في MinIO بعد إسقاط المجموعة المقابلة؟
صُممت البيانات في MinIO لتبقى لفترة زمنية معينة لتسهيل عملية استرجاع البيانات.
هل يدعم ميلفوس محركات رسائل أخرى غير بولسار؟
نعم. كافكا مدعوم في ميلفوس 2.1.0.
ما الفرق بين البحث والاستعلام؟
في Milvus، يسترجع البحث عن تشابه المتجهات في Milvus المتجهات بناءً على حساب التشابه وتسريع فهرس المتجهات. على عكس البحث عن التشابه المتجه، يسترجع الاستعلام عن المتجهات المتجهات عبر التصفية القياسية بناءً على تعبير منطقي. يقوم التعبير المنطقي بالتصفية على الحقول القياسية أو حقل المفتاح الأساسي، ويسترجع جميع النتائج التي تطابق المرشحات. في الاستعلام، لا يتم تضمين مقاييس التشابه أو فهرس المتجهات.
لماذا تبلغ دقة قيمة المتجه العائم 7 أرقام عشرية في ملفوس؟
يدعم Milvus تخزين المتجهات كمصفوفات Float32. قيمة Float32 لها دقة 7 أرقام عشرية. حتى مع قيمة Float64، مثل 1.3476964684980388، يخزنها Milvus على أنها 1.347696. ولذلك، عند استرداد مثل هذا المتجه من Milvus، تفقد دقة قيمة Float64.
كيف يتعامل Milvus مع أنواع بيانات المتجهات ودقتها؟
يدعم Milvus أنواع المتجهات الثنائية و Float32 و Float16 و BFloat16.
- المتجهات الثنائية: تخزين البيانات الثنائية كتسلسلات من 0 و1، وتستخدم في معالجة الصور واسترجاع المعلومات.
- متجهات Float32: تخزين افتراضي بدقة تبلغ حوالي 7 أرقام عشرية. حتى قيم Float64 يتم تخزينها بدقة Float32، مما يؤدي إلى فقدان محتمل للدقة عند الاسترجاع.
- متجهات Float16 و BFloat16: توفر دقة واستخدام أقل للذاكرة. يعد Float16 مناسبًا للتطبيقات ذات النطاق الترددي والتخزين المحدود، بينما يوازن BFloat16 بين النطاق والكفاءة، ويُستخدم عادةً في التعلم العميق لتقليل المتطلبات الحسابية دون التأثير بشكل كبير على الدقة.
هل يدعم Milvus تحديد القيم الافتراضية للحقول القياسية أو المتجهة؟
لا يدعم Milvus 2.4.x حاليًا تحديد القيم الافتراضية للحقول القياسية أو المتجهة. هذه الميزة مخططة للإصدارات المستقبلية.
هل يتم تحرير مساحة التخزين مباشرة بعد حذف البيانات في ملفوس؟
لا، لن يتم تحرير مساحة التخزين على الفور عند حذف البيانات في Milvus. على الرغم من أن حذف البيانات يضع علامة على الكيانات على أنها "محذوفة منطقيًا"، إلا أنه قد لا يتم تحرير المساحة الفعلية على الفور. إليك السبب:
- الضغط: يقوم ميلفوس تلقائيًا بضغط البيانات في الخلفية. تدمج هذه العملية أجزاء البيانات الأصغر في أجزاء أكبر وتزيل البيانات المحذوفة منطقيًا (الكيانات التي تم وضع علامة الحذف عليها) أو البيانات التي تجاوزت وقت تشغيلها (TTL). ومع ذلك، ينشئ الضغط مقاطع جديدة مع وضع علامة "محذوفة" على المقاطع القديمة.
- تجميع القمامة: تقوم عملية منفصلة تسمى تجميع القمامة (GC) بشكل دوري بإزالة هذه المقاطع "المسقطة"، مما يؤدي إلى تحرير مساحة التخزين التي كانت تشغلها. وهذا يضمن الاستخدام الفعال للتخزين ولكن يمكن أن يؤدي إلى تأخير طفيف بين الحذف واستصلاح المساحة.
هل يمكنني رؤية البيانات التي تم إدراجها أو حذفها أو إعادة إدراجها مباشرةً بعد العملية دون انتظار التدفق؟
نعم، في Milvus، لا ترتبط رؤية البيانات في Milvus مباشرةً بعمليات التدفق بسبب بنية الفصل بين التخزين والحساب. يمكنك إدارة إمكانية قراءة البيانات باستخدام مستويات الاتساق.
عند اختيار مستوى الاتساق، ضع في اعتبارك المفاضلة بين الاتساق والأداء. بالنسبة للعمليات التي تتطلب رؤية فورية، استخدم مستوى اتساق "قوي". لعمليات الكتابة الأسرع، قم بإعطاء الأولوية للاتساق الأضعف (قد لا تكون البيانات مرئية على الفور). لمزيد من المعلومات، راجع الاتساق.
بعد تمكين ميزة مفتاح التقسيم، ما هي القيمة الافتراضية لـ num_partitions
في ميلفوس، ولماذا؟
عندما يتم تمكين ميزة مفتاح التقسيم، يتم تعيين القيمة الافتراضية لـ num_partitions
في ملفوس على 16
. يتم اختيار هذا الافتراضي لأسباب تتعلق بالاستقرار والأداء. يمكنك ضبط القيمة num_partitions
حسب الحاجة من خلال تحديدها في الدالة create_collection
.
هل هناك حد أقصى لطول تعبيرات التصفية القياسية؟
نعم، الحد الأقصى لطول تعبيرات التصفية العددية مقيد بحد نقل RPC، والذي يتم تعريفه في ملف التكوين milvus.yaml
. على وجه التحديد، يتم تعيين الحد بواسطة المعلمة serverMaxRecvSize
ضمن قسم الوكيل:
proxy:
grpc:
serverMaxRecvSize: 67108864 # The maximum size of each RPC request that the proxy can receive, unit: byte
بشكل افتراضي، يكون الحد الأقصى لحجم كل طلب طلب استدعاء أوامر الشراء (RPC) 64 ميغابايت. لذلك، يجب أن يكون طول تعبير التصفية أقل من هذا الحد لضمان نجاح المعالجة.
عند إجراء بحث مجمّع عن المتجهات، كم عدد المتجهات التي يمكن تحديدها مرة واحدة؟ هل هناك حد؟
نعم، إن عدد المتجهات التي يمكن تحديدها في البحث عن المتجهات المجمعة محدود بحجم نقل RPC، كما هو محدد في ملف التكوين milvus.yaml
. يتم تحديد هذا الحد بواسطة المعلمة serverMaxRecvSize
ضمن قسم الوكيل:
proxy:
grpc:
serverMaxRecvSize: 67108864 # The maximum size of each RPC request that the proxy can receive, unit: byte
بشكل افتراضي، يبلغ الحد الأقصى لحجم كل طلب RPC 64 ميغابايت. ولذلك، يجب أن يكون الحجم الإجمالي لمتجهات الإدخال، بما في ذلك بيانات الأبعاد والبيانات الوصفية الخاصة بها، أقل من هذا الحد لضمان التنفيذ الناجح.
كيف يمكنني الحصول على جميع القيم الفريدة لحقل قياسي معين من مجموعة?
حاليًا، لا توجد طريقة مباشرة لتحقيق ذلك. كحل بديل، نوصي باستخدام query_iterator لاسترداد جميع القيم لحقل معين، ثم إجراء عملية إلغاء التكرار يدويًا. نخطط لإضافة دعم مباشر لهذه الميزة في الإصدار Milvus 2.6. مثال على استخدام query_iterator:
# set up iterator
iterator = client.query_iterator(
collection_name="demo_collection",
output_fields=["target"]
)
# do iteration and store target values into value_set
value_set = set()
while True:
res = iterator.next()
if len(res) == 0:
print("query iteration finished, close")
iterator.close()
break
for i in range(len(res)):
value_set.add(res[i]["target"])
# value_set will contain unique values for target column
ما هي قيود استخدام الحقول الديناميكية؟ على سبيل المثال، هل هناك حدود للحجم أو طرق التعديل أو قيود الفهرسة؟
يتم تمثيل الحقول الديناميكية داخليًا باستخدام حقول JSON، بحد حجم 65,536 بايت. وهي تدعم تعديلات الإدراج، مما يسمح لك بإضافة الحقول أو تحديثها. ومع ذلك، اعتبارًا من ميلفوس 2.5.1، لا تدعم الحقول الديناميكية الفهرسة. سيتم تقديم دعم إضافة فهارس ل JSON في الإصدارات المستقبلية.
هل يدعم Milvus تغييرات المخطط؟
اعتبارًا من الإصدار 2.5.0 من Milvus، تقتصر تغييرات المخطط على تعديلات محددة، مثل تعديل خصائص مثل المعلمة mmap
. يمكن للمستخدمين أيضًا تعديل max_length
لحقول varchar و max_capacity
لحقول الصفيف. ومع ذلك، يتم التخطيط لإضافة أو إزالة الحقول في المخططات في الإصدارات المستقبلية، مما يعزز مرونة إدارة المخطط داخل Milvus.
هل يتطلب تعديل max_length لـ VarChar إعادة تنظيم البيانات؟
لا، تعديل max_length
لحقل VarChar لا يستلزم إعادة تنظيم البيانات، مثل الضغط أو إعادة التنظيم. يقوم هذا التعديل في المقام الأول بتحديث معايير التحقق من صحة أي بيانات جديدة يتم إدراجها في الحقل، دون أن تتأثر البيانات الموجودة. ونتيجة لذلك، يعتبر هذا التغيير خفيف الوزن ولا يفرض نفقات كبيرة على النظام.
هل لا تزال لديك أسئلة؟
يمكنك ذلك:
- تحقق من ميلفوس على GitHub. نرحب بك لطرح الأسئلة ومشاركة الأفكار ومساعدة الآخرين.
- انضم إلى مجتمع Slack الخاص بنا للحصول على الدعم والتفاعل مع مجتمعنا مفتوح المصدر.