المجموعات
يمكن أن يكون مفهوم المجموعات في قاعدة بيانات Qdrant النائية مشابهًا لهيكل الجدول في MYSQL، حيث يُستخدم لتخزين نوع موحد من البيانات النائية. يتم الإشارة إلى كل قطعة من البيانات المخزنة في مجموعة باسم نقطة في Qdrant. هنا، تكون النقطة مشابهة لمفهوم الفضاء الهندسي الرياضي، حيث تمثل تمثيلًا لشكل ما من البيانات النائية (فقط اعتبارها قطعة من البيانات).
في نفس المجموعة، يجب أن تحتوي كل نقطة نائية على أبعاد متطابقة ويتم مقارنتها باستخدام مقياس واحد. يمكن استخدام النواتج المسماة لتضمين عدة نواتج في نقطة واحدة، حيث تحتوي كل نواتج على أبعادها الخاصة ومتطلبات مقياسها.
تُستخدم مقاييس المسافات لقياس التشابه بين النواتج النائية. تعتمد اختيار المقياس على كيفية الحصول على النواتج النائية، خصوصًا الأسلوب المستخدم لتدريب المشفرات لشبكات الأعصاب.
تدعم Qdrant أنواع المقاييس الشهيرة التالية:
- الضرب النقطي: Dot
- التشابه بزاوية القطع: Cosine
- المسافة الأوكليدية: Euclid
لتحسين كفاءة البحث، يتم تحقيق التشابه بزاوية القطع عن طريق أخذ الضرب النقطي للنواتج المعيارية. عند التحميل، تتم معيارة النواتج تلقائيًا. بالإضافة إلى المقاييس وأحجام النواتج، تستخدم كل مجموعة أيضًا مجموعة خاصة من المعلمات للتحكم في تحسين المجموعة، وبناء الفهرس، والتنظيف. يمكن تغيير هذه الإعدادات في أي وقت من الأوقات من خلال الطلبات المقابلة.
إعداد التعددية
كم عدد المجموعات التي يجب إنشاؤها؟ في معظم الحالات، فإنك بحاجة فقط لاستخدام مجموعة واحدة مع التقسيم القائم على الحمولة. يُعرف هذا النهج باسم التعددية. بالنسبة لمعظم المستخدمين، يعتبر هذا كفء ولكن يتطلب تكوينًا إضافيًا. تعرف على كيفية إعداد التعددية.
متى يجب إنشاء عدة مجموعات؟ عندما يكون لديك عدد محدود من المستخدمين وتحتاج إلى عزل البيانات. يعتبر هذا النهج أكثر مرونة ولكن قد يكون أكثر تكلفة، حيث إن إنشاء عدد كبير من المجموعات قد يؤدي إلى تكبد عبء على الموارد. بالإضافة إلى ذلك، يجب عليك التأكد من عدم التداخل مع بعضها البعض بأي شكل من الأشكال، بما في ذلك من حيث الأداء.
إنشاء مجموعة
PUT /collections/{اسم_المجموعة}
{
"vectors": {
"size": 300,
"distance": "Cosine"
}
}
بالإضافة إلى الخيارات المطلوبة، يمكن أيضًا تحديد قيم مخصصة للخيارات التالية للمجموعة:
-
hnsw_config
- لتفاصيل الفهرس، راجع القسم الخاص بالفهرس. -
wal_config
- تكوين متعلق بتسجيل الكتابة المُسبق. للمزيد من المعلومات المفصلة حول WAL، يُرجى الرجوع إليه. -
optimizers_config
- لتفاصيل المُحسنات، راجع القسم الخاص بالمُحسنات. -
shard_number
- يحدد عدد الأجزاء الفرعية التي يجب أن تحتوي عليها المجموعة. لمزيد من المعلومات، يُرجى الرجوع إلى القسم المتعلق بالنشر الموزع. -
on_disk_payload
- يحدد مكان تخزين بيانات الحمولة. إذا تم تعيينه إلىtrue
، فسيتم تخزين الحمولة فقط على القرص. يمكن أن يكون هذا مفيدًا جدًا في تقييد استخدام ذاكرة الوصول العشوائي عند التعامل مع حمولات كبيرة. -
quantization_config
- لمعلومات مفصلة حول التكوير، راجع التكوير.
يتم تحديد المعلمات الافتراضية للخيارات الاختيارية للمجموعة في ملف التكوين.
لمزيد من المعلومات حول معلمات المجموعة والنواتج، يُرجى الرجوع إلى تعريف النموذج وملف التكوين.
متوفر من الإصدار v1.2.0
تخزين النواتج في ذاكرة الوصول العشوائية لتحقيق وصول سريع جدًا. يمكن تعيين معلمة on_disk
في تكوين النواتج. إذا تم تعيينها إلى القيمة true
، سيتم تخزين جميع النواتج على القرص. سيتيح ذلك استخدام تصفح الذاكرة، مما يناسب استيراد كميات كبيرة من البيانات.
إنشاء مجموعة من مجموعة أخرى
متوفر من الإصدار v1.0.0
يمكن تهيئة المجموعة من مجموعة نائية أخرى موجودة.
يمكن أن يكون هذا مفيدًا لتجربة بسرعة تكوينات مختلفة لنفس مجموعة البيانات.
عند تعيين تكوين النواتج في المجموعة الجديدة، تأكد من أن تحتوي النواتج على نفس الحجم ودالة المسافة كما في المجموعة الأصلية.
PUT /collections/{اسم_المجموعة}
{
"vectors": {
"size": 300,
"distance": "Cosine"
},
"init_from": {
"collection": {اسم_المجموعة_الأصلية}
}
}
مجموعة جمع متعددة الشرطة
متاح من الإصدار v0.10.0
يمكن أن يحتوي كل سجل على عدة شرائط. تُمكن هذه الميزة من تخزين عدة شرائط في مجموعة. لتمييز الشرائط داخل سجل، قم بتعريف أسماءها الفريدة عند إنشاء المجموعة. يحتوي كل شريط مسمى ضمن هذا المخطط على مسافة وحجمه الخاص:
PUT /collections/{collection_name}
{
"vectors": {
"image": {
"size": 4,
"distance": "Dot"
},
"text": {
"size": 8,
"distance": "Cosine"
}
}
}
بالنسبة لبعض الحالات الخاصة، يمكن إنشاء مجموعة بدون تخزين لأي شريط.
متاح من الإصدار v1.1.1
بالنسبة لكل شريط مسمى، يمكنك تحديد اختيارياً hnsw_config
أو quantization_config
للانحراف عن تكوين المجموعة. يمكن استخدام هذا لتحسين أداء البحث على مستوى الشريط.
متاح من الإصدار v1.2.0
يتم تخزين الشرائط في الذاكرة للوصول السريع. يمكن تعيين on_disk
لكل شريط لتخزين جميع الشرائط دائمًا على القرص. سيتيح ذلك تعيين تعيينات الذاكرة، مما يتناسب مع استيعاب كميات كبيرة من البيانات.
حذف مجموعة
DELETE /collections/{collection_name}
تحديث معلمات المجموعة
يمكن أن تكون التحديثات الديناميكية للمعلمات مفيدة، مثل تحميل الشرائط الأولي بكفاءة أكبر. على سبيل المثال، يمكنك تعطيل التفهيم أثناء التحميل وتمكينه فور اكتمال التحميل. بهذه الطريقة، لن تضيع موارد الحوسبة الإضافية لإعادة بناء الفهرس.
يمكن تمكين التفهيم لقطاع يحتوي على شرائط أكبر من 10000 كيلوبايت في المثال التالي:
PATCH /collections/{collection_name}
{
"optimizers_config": {
"indexing_threshold": 10000
}
}
يمكن تحديث البارامترات التالية:
-
optimizers_config
- انظر إلى الوصف المفصل لأدوات التحسين. -
hnsw_config
- انظر إلى الوصف المفصل للفهرس. -
quantization_config
- انظر إلى الوصف المفصل للكمّة. -
vectors
- تكوين لشرائط محددة، بما في ذلك تكويناتها المعمول بهاhnsw_config
وquantization_config
وإعداداتon_disk
. -
params
- معلمات مجموعة أخرى، بما في ذلكwrite_consistency_factor
وon_disk_payload
.
يتم توجيه المواصفات الكاملة لواجهة برمجة التطبيقات إلى تعريفات المخطط.
متاح منذ الإصدار v1.4.0
يضيف Qdrant 1.4 دعمًا لتحديث معلمات المجموعة بشكل أكبر أثناء التشغيل. يمكن الآن تغيير معلمات فهرس HNSW والكمّة وتكوين القرص دون إعادة إنشاء المجموعة. ستعيد القطع (مع بيانات الفهرس والكمة) تشييد نفسها في الخلفية لتتطابق مع المعلمات المحدثة.
في المثال التالي، يتم تحديث المجموعة بأكملها ومعلمات فهرس HNSW والكمّة لـ my_vector
:
PATCH /collections/{collection_name}
{
"vectors": {
"my_vector": {
"hnsw_config": {
"m": 32,
"ef_construct": 123
},
"quantization_config": {
"product": {
"compression": "x32",
"always_ram": true
}
},
"on_disk": true
}
},
"hnsw_config": {
"ef_construct": 123
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.8,
"always_ram": false
}
}
}
ملاحظة: لتحديث معلمات الشرائط في مجموعة بدون شرائط مسماة، يمكن استخدام اسم فارغ (""
).
قد تتعطل الاتصالات بهذا النقطة نظرًا لانتظار محسّنات موجودة. نحن لا نوصي باستخدام هذه الميزة في قاعدة بيانات إنتاجية حيث تمكن إعادة بناء الفهرس من إدخال تكاليف إضافية ملحوظة.
معلومات المجموعة
يسمح Qdrant بتحديد معلمات تكوين مجموعة موجودة لفهم توزيع النقاط وحالة التخزين.
GET /collections/{collection_name}
{
"result": {
"status": "green",
"optimizer_status": "ok",
"vectors_count": 1068786,
"indexed_vectors_count": 1024232,
"points_count": 1068786,
"segments_count": 31,
"config": {
"params": {
"vectors": {
"size": 384,
"distance": "Cosine"
},
"shard_number": 1,
"replication_factor": 1,
"write_consistency_factor": 1,
"on_disk_payload": false
},
"hnsw_config": {
"m": 16,
"ef_construct": 100,
"full_scan_threshold": 10000,
"max_indexing_threads": 0
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": 20000,
"flush_interval_sec": 5,
"max_optimization_threads": 1
},
"wal_config": {
"wal_capacity_mb": 32,
"wal_segments_ahead": 0
}
},
"payload_schema": {}
},
"status": "ok",
"time": 0.00010143
}
إذا تم إدراج نقاط في المجموعة، قد يتغير حقل status
إلى "yellow" أثناء عملية الأمان وسيتحول إلى "green" بمجرد معالجة جميع النقاط بنجاح.
قد تواجه حالات الألوان التالية:
- ?
green
: المجموعة جاهزة - ?
yellow
: المجموعة تخضع لعملية تحسين - ?
red
: واجه المحرك خطأ غير قابل للتعويض
بعض الخصائص الأخرى المهمة تشمل:
-
points_count
- العدد الإجمالي للكائنات (النقاط وحمولتها) المخزنة في المجموعة -
vectors_count
- العدد الإجمالي للنقاط في المجموعة. إذا كان لكل كائن عدة نقاط، فقد لا يتساوى ذلك معpoints_count
. -
indexed_vectors_count
- العدد الإجمالي للنقاط المخزنة في فهرس HNSW. لا يخزن Qdrant جميع النقاط في الفهرس، وإنما فقط تلك التي قد تنشئ فصول فهرس بناءً على التكوين المعطى.
تخزين النقاط في HNSW
قد تجد في بعض الحالات أن قيمة indexed_vectors_count
أقل من vectors_count
. هذا سلوك مقصود تبعًا لتكوين مُحسِّن. سيتم بناء شريحة فهرس جديدة إذا تجاوز حجم النقاط غير المُفَهَرسة حد indexing_threshold
(بالكيلوبايت). إذا كانت مجموعتك صغيرة للغاية أو كانت بُعد النقطة منخفضًا، فقد لا تتم إنشاء شرائح HNSW، وقد يتساوى indexed_vectors_count
مع 0
.
يمكنك تقليل قيمة indexing_threshold
في معلمات المجموعة لإنشاء شريحة فهرس جديدة في المجموعة الحالية.
اسماء المجموعات
في بيئة الإنتاج، قد تكون هناك حاجة للتبديل بسلاسة بين إصدارات مختلفة من النقاط، مثل الترقية إلى إصدار جديد من الشبكات العصبية.
في هذه الحالات، قد لا يكون من الممكن إيقاف الخدمة وإعادة بناء المجموعة باستخدام النقاط الجديدة. الاسم البديل هو اسم إضافي لمجموعة موجودة. يمكن تنفيذ الاستعلامات بالكامل باستخدام الاسم البديل بدلاً من اسم المجموعة.
وبالتالي، يمكن بناء مجموعة ثانية في الخلفية، ثم يمكن تبديل الاسم البديل من المجموعة القديمة إلى المجموعة الجديدة. نظرًا لأن تغييرات الاسم البديل تكون ذرية، لا تتأثر الطلبات المتزامنة أثناء عملية التبديل.
إنشاء اسم بديل
POST /collections/aliases
{
"actions": [
{
"create_alias": {
"alias_name": "production_collection",
"collection_name": "example_collection"
}
}
]
}
حذف الاسم البديل
POST /collections/aliases
{
"actions": [
{
"delete_alias": {
"alias_name": "production_collection"
}
}
]
}
تبديل المجموعة
يمكن تنفيذ عمليات الاسم البديل بشكل ذري. على سبيل المثال، يمكنك استخدام الأمر التالي لتبديل المجموعة المُحددة وراء الكواليس:
POST /collections/aliases
{
"actions": [
{
"delete_alias": {
"alias_name": "production_collection"
}
},
{
"create_alias": {
"alias_name": "production_collection",
"collection_name": "new_collection"
}
}
]
}
قائمة تجميع البدائل
GET /collections/{اسم_التجميع}/البدائل
قائمة جميع البدائل
GET /البدائل
قائمة جميع التجميعات
GET /التجميعات