صنف الCollection في Milvus مشابه لجدول في MySQL، يُستخدم لتنظيم البيانات ويتألف من قسم واحد أو أكثر.
إنشاء Collection
يتألف الCollection من قسم واحد أو أكثر. عند إنشاء Collection جديد، ستقوم Milvus بإنشاء قسم افتراضي يحمل اسم _default
. لمزيد من المعلومات، يُرجى الرجوع إلى شرح المصطلحات - المتعلقة بالCollections.
المثال التالي سيقوم بإنشاء Collection بأسم book
مع قسمين، بما في ذلك حقل مفتاح رئيسي بأسم book_id
، حقل نوعه INT64
بأسم word_count
، وحقل نصي ثنائي الأبعاد من نوع النقطة العائمة بأسم book_intro
. تستخدم التطبيقات الفعلية في كثير من الأحيان نواتج ذات أبعاد أكبر من هذا المثال.
وضع الاستعداد
الوضع مشابه لتعريف هيكل جدول MYSQL.
يجب أن تحتوي المجموعة التي سيتم إنشاؤها على حقل مفتاح أساسي وحقل ناقل. يدعم حقل المفتاح الأساسي أنواع البيانات INT64 و VarChar.
أولاً، قم بإعداد المعلمات اللازمة، بما في ذلك هيكل الحقل، وهيكل المجموعة، واسم المجموعة.
قبل تحديد هيكل المجموعة، قم بإنشاء هيكل لكل حقل في المجموعة. لتقليل تعقيد إدراج البيانات، يسمح Milvus لك بتحديد قيمة افتراضية لكل حقل من الحقول العلمية (باستثناء حقل المفتاح الرئيسي). وهذا يعني أنه إذا تركت حقلًا فارغًا عند إدراج البيانات، سيتم استخدام القيمة الافتراضية المكونة أثناء إنشاء هيكل الحقل.
from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
name="book_id",
dtype=DataType.INT64,
is_primary=True,
)
book_name = FieldSchema(
name="book_name",
dtype=DataType.VARCHAR,
max_length=200,
default_value="Unknown" # القيمة الافتراضية هي "Unknown"
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
default_value=9999 # القيمة الافتراضية هي 9999
)
book_intro = FieldSchema(
name="book_intro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[book_id, book_name, word_count, book_intro],
description="بحث كتاب اختبار", # الوصف هو "بحث كتاب اختبار"
enable_dynamic_field=True # تمكين هيكل ديناميكي
)
collection_name = "book"
نوع الهيكل | المعلمة | الوصف | الخيارات |
---|---|---|---|
FieldSchema |
name |
اسم الحقل الذي سيتم إنشاؤه. | N/A |
dtype |
نوع البيانات للحقل الذي سيتم إنشاؤه. | حقل المفتاح الأساسي: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) الحقول العلمية: - DataType.BOOL (Boolean) - DataType.INT8 (numpy.int8) - DataType.INT16 (numpy.int16) - DataType.INT32 (numpy.int32) - DataType.INT64 (numpy.int64) - DataType.FLOAT (numpy.float32) - DataType.DOUBLE (numpy.double) - DataType.VARCHAR (VARCHAR) - DataType.JSON (JSON) الحقول الناقلة: - BINARY_VECTOR (Binary vector) - FLOAT_VECTOR (Float vector) |
|
is_primary |
مفتاح تحكم يحدد ما إذا كان الحقل هو حقل مفتاح أساسي. يجب تحديد هذه المعلمة لحقول المفتاح الأساسي. | True أو False |
|
auto_id |
مفتاح تحكم لتمكين أو تعطيل تعيين الهوية التلقائي (المفتاح الرئيسي). يجب تحديد هذا المعلمة لحقول المفتاح الأساسي والقيمة الافتراضية هي False بشكل افتراضي. |
True or False |
|
max_length (مطلوب لحقول VARCHAR) |
الحد الأقصى لطول السلسلة التي يمكن إدراجها. | [1, 65,535] | |
default_value |
القيمة الافتراضية للحقل. تنطبق هذه المعلمة فقط على الحقول العلمية غير القائمة وغير JSON. لا يمكن تحديد قيمة افتراضية لحقل المفتاح الرئيسي. لمزيد من المعلومات، يرجى الرجوع إلى معلمة default_value . |
N/A | |
dim (مطلوب لحقول الناقلة) |
البُعد الخاص بالناقلة. | [1, 32,768] | |
description (اختياري) |
وصف الحقل. | N/A | |
CollectionSchema |
fields |
الحقول التي ستتم إنشاؤها للمجموعة. | N/A |
description (اختياري) |
وصف المجموعة التي ستتم إنشاؤها. | N/A | |
enable_dynamic_field |
ما إذا كان تمكين هيكل ديناميكي. نوع البيانات: بولياني (true or false ). اختياري، القيمة الافتراضية هي False . لمزيد من المعلومات حول هيكل ديناميكي، يرجى الرجوع إلى دليل المستخدم لهيكل ديناميكي وإدارة المجموعة. |
||
collection_name |
اسم المجموعة التي ستتم إنشاؤها. | N/A |
إنشاء مجموعة بناءً على النموذج
بعد ذلك، قم بإنشاء مجموعة بناءً على النموذج المحدد.
from pymilvus import Collection
collection = Collection(
name=اسم_المجموعة,
schema=النموذج,
using='الافتراضي',
shards_num=2
)
المعامل | الوصف | الخيارات |
---|---|---|
using (اختياري) |
حدد الاسم المستعار للخادم هنا، واختر أين تريد إنشاء المجموعة في خادم Milvus. | لا توجد |
shards_num (اختياري) |
عدد الأجزاء لإنشاء المجموعة. | [1,16] |
num_partitions (اختياري) |
العدد اللوجي للأقسام لإنشاء المجموعة. | [1,4096] |
*kwargs: collection.ttl.seconds (اختياري) |
TTL للمجموعة هو وقت انتهاء صلاحية المجموعة. سيتم تنظيف البيانات في المجموعة المنتهية صلاحيتها ولن تشارك في البحث أو الاستعلامات. حدد TTL بالثواني. | يجب أن يكون القيمة 0 أو أكبر. القيمة 0 تعني تعطيل TTL. |
القيود
تكوين الموارد
الميزة | الحد الأقصى |
---|---|
طول اسم المجموعة | 255 حرفًا |
عدد الأقسام في المجموعة | 4,096 |
عدد الحقول في المجموعة | 64 |
عدد الأجزاء في المجموعة | 16 |
المعامل default_value
- ينطبق
default_value
فقط على الحقول الجزئية غير الصفيفية والجزئية غير سكالارية من JSON. - لا ينطبق
default_value
على المفتاح الرئيسي. - يجب أن يكون نوع بيانات
default_value
نفس نوع البيانات المحدد فيdtype
. وإلا قد تحدث أخطاء. - في حالة استخدام
auto_id
، لا يُسمح بتعيين جميع الحقول المتبقية لاستخدام القيمة الافتراضية. بمعنى آخر، عند القيام بعمليات الإدراج أو التحديث، يجب عليك تحديد قيمة على الأقل لحقل واحد. وإلا قد تحدث أخطاء.
إعادة تسمية مجموعة
إذا كنت ترغب في إعادة تسمية مجموعة، يمكنك التفاعل مع Milvus باستخدام واجهة برمجة التطبيقات لإعادة تسمية المجموعة. سيساعدك هذا الدليل في فهم كيفية استخدام SDK المختار الخاص بك لإعادة تسمية مجموعة موجودة.
في كود الفقرة التالية، نقوم بإنشاء مجموعة ونسميها old_collection
، ثم نقوم بإعادة تسميتها إلى new_collection
.
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
schema = CollectionSchema(fields=[
... FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
... FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
collection = Collection(name="old_collection", schema=schema)
utility.rename_collection("old_collection", "new_collection") # Output: True
utility.has_collection("new_collection") # Output: False
تعديل مجموعة
حاليًا، ميزة TTL متاحة فقط في لغة Python.
collection.set_properties(properties={"collection.ttl.seconds": 1800})
المثال أعلاه يغير TTL للمجموعة إلى 1800 ثانية.
التحقق مما إذا كانت المجموعة موجودة
التحقق مما إذا كانت المجموعة موجودة في Milvus.
from pymilvus import utility
utility.has_collection("book")
التحقق من تفاصيل المجموعة
from pymilvus import Collection
collection = Collection("book") # الحصول على مجموعة موجودة.
collection.schema # يُرجع CollectionSchema للمجموعة.
collection.description # يُرجع وصف المجموعة.
collection.name # يُرجع اسم المجموعة.
collection.is_empty # يُرجع بوليان يشير ما إذا كانت المجموعة فارغة.
collection.num_entities # يُرجع عدد الكيانات في المجموعة.
collection.primary_field # يُرجع schema.FieldSchema للحقل الرئيسي.
collection.partitions # يُرجع قائمة من أجزاء [Partition].
collection.indexes # يُرجع قائمة من [Index] الكائنات.
collection.properties # يُرجع وقت انتهاء صلاحية البيانات في المجموعة.
سرد كل المجموعات
from pymilvus import utility
utility.list_collections()
حذف مجموعة
from pymilvus import utility
utility.drop_collection("book")
إنشاء اسم مستعار للمجموعة
from pymilvus import utility
utility.create_alias(
collection_name = "book",
alias = "publication"
)
حذف اسم مستعار للمجموعة
from pymilvus import utility
utility.drop_alias(alias = "publication")
تعديل اسم الإشارة للمجموعة
قم بتعديل الإشارة الحالية لتشير إلى مجموعة مختلفة. يستند العملية إلى سيناريو حيث تم إنشاء الإشارة النشر
بالأصل لمجموعة أخرى.
from pymilvus import utility
utility.alter_alias(
collection_name = "book",
alias = "publication"
)
تحميل مجموعة بيانات
كيفية تحميل مجموعة بيانات في الذاكرة قبل تنفيذ عمليات البحث أو الاستعلام. في Milvus، يتم تنفيذ جميع عمليات البحث والاستعلام في الذاكرة.
يسمح Milvus للمستخدمين بتحميل المجموعات كنسخ متعددة لاستخدام موارد وحدة المعالجة المركزية والذاكرة الإضافية لعقد الاستعلام. تحسن هذه الميزة الإجمالية لـ QPS والإنتاجية دون الحاجة إلى عتاد إضافي. قبل تحميل مجموعة بيانات، تأكد من أنك قمت بإنشاء فهرس لها.
from pymilvus import Collection, utility
collection = Collection("book")
collection.load(replica_number=2)
utility.load_state("book")
utility.loading_progress("book")
إطلاق مجموعة بيانات
كيفية إطلاق مجموعة بيانات بعد عمليات البحث أو الاستعلام لتقليل استخدام الذاكرة.
from pymilvus import Collection
collection = Collection("book")
collection.release()