کلاس Collection در Milvus مشابه یک جدول در MySQL است، برای سازماندهی دادهها استفاده میشود و از یک یا چند قسمت تشکیل شده است.
ایجاد یک Collection
یک Collection از یک یا چند partition تشکیل شده است. هنگام ایجاد یک Collection جدید، Milvus یک partition پیشفرض با نام _default
ایجاد میکند. برای اطلاعات بیشتر، لطفا به توضیحات مرتبط با مفاهیم - مرتبط با collections مراجعه کنید.
مثال زیر یک Collection با نام book
و دو partition ایجاد میکند، شامل یک فیلد کلید اصلی با نام 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="نامعلوم" # مقدار پیشفرض "نامعلوم" است
)
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 = "کتاب"
نوع طرح | پارامتر | توضیحات | گزینهها |
---|---|---|---|
FieldSchema |
name |
نام فیلدی که باید ایجاد شود. | بدون |
dtype |
نوع داده فیلدی که باید ایجاد شود. | فیلد کلید اصلی: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) فیلدهای اسکالر: - DataType.BOOL (بولین) - 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 (بردار دودویی) - FLOAT_VECTOR (بردار ممیزشناور) |
|
is_primary |
یک سوئیچ که کنترل میکند آیا فیلد یک فیلد کلید اصلی است یا نه. این پارامتر برای فیلدهای کلید اصلی باید مشخص شود. | True یا False |
|
auto_id |
یک سوئیچ برای فعال یا غیرفعال کردن اختصاص خودکار ID (کلید اصلی). این پارامتر برای فیلدهای کلید اصلی باید مشخص شود و به صورت پیشفرض برابر False است. |
True یا False |
|
max_length (الزامی برای فیلدهای VARCHAR) |
حداکثر طول رشتهای که میتوان درج کرد. | [1, 65,535] | |
default_value |
مقدار پیشفرض فیلد. این پارامتر تنها برای فیلدهای اسکالر غیر-آرایهای و غیر-JSON اعمال میشود. امکان مشخص کردن مقدار پیشفرض برای فیلد کلید اصلی وجود ندارد. برای کسب اطلاعات بیشتر، لطفا به پارامتر default_value مراجعه کنید. |
بدون | |
dim (الزامی برای فیلدهای برداری) |
بعد بردار. | [1, 32,768] | |
description (اختیاری) |
توضیحات فیلد. | بدون | |
CollectionSchema |
fields |
فیلدهای مجموعه که برای ایجاد استفاده میشود. | بدون |
description (اختیاری) |
توضیحات مجموعهای که باید ایجاد شود. | بدون | |
enable_dynamic_field |
آیا برای فعال کردن طرح دینامیک یا نه. نوع داده: بولین (true یا false ). اختیاری، به صورت پیشفرض برابر False است. برای اطلاعات بیشتر در مورد طرح دینامیک، لطفا به راهنمای کاربر برای طرح دینامیک و مدیریت مجموعه مراجعه کنید. |
||
collection_name |
نام مجموعهای که باید ایجاد شود. | بدون |
ایجاد یک مجموعه با طرح
سپس، یک مجموعه با طرح مشخص ساخته شود.
from pymilvus import Collection
collection = Collection(
name=collection_name,
schema=schema,
using='default',
shards_num=2
)
پارامتر | توضیحات | گزینهها |
---|---|---|
using (اختیاری) |
اینجا نام مستعار سرور مشخص شده را مشخص کنید و مکان ایجاد مجموعه را در سرور Milvus انتخاب کنید. | ندارد |
shards_num (اختیاری) |
تعداد شاردهایی که برای مجموعه ایجاد خواهد شد. | [1,16] |
num_partitions (اختیاری) |
تعداد منطقی پارتیشنها برای مجموعه ایجاد شده است. | [1,4096] |
*kwargs: collection.ttl.seconds (اختیاری) |
مدت اعتبار مجموعه، زمان انقضاء مجموعه است. دادههای موجود در مجموعه منقضی شده پاک شده و در جستجوها یا پرسوجوها شرکت نخواهند کرد. مدت زمان اعتبار را به ثانیه مشخص کنید. | مقدار باید صفر یا بزرگتر باشد. صفر به معنی غیرفعال کردن مدت اعتبار است. |
محدودیتها
پیکربندی منابع
ویژگی | حداکثر محدودیت |
---|---|
طول نام مجموعه | 255 کاراکتر |
تعداد پارتیشنها در مجموعه | 4,096 |
تعداد فیلدها در مجموعه | 64 |
تعداد شاردها در مجموعه | 16 |
پارامتر default_value
- پارامتر
default_value
تنها برای فیلدهای نامحدود واسکالر JSON اعمال میشود. - پارامتر
default_value
برای کلید اصلی اعمال نمیشود. - نوع داده پارامتر
default_value
باید همان نوع داده مشخص شده درdtype
باشد. در غیر این صورت، خطاها ایجاد میشود. - در صورت استفاده از
auto_id
، اجازه داده نمیشود که تمام فیلدهای باقیمانده از مقدار پیشفرض استفاده کنند. به عبارت دیگر، هنگام انجام عملیات درج یا بهروزرسانی، باید مقدار حداقل یک فیلد را مشخص کنید. در غیر این صورت، خطاها ایجاد میشود.
تغییر نام یک مجموعه
اگر میخواهید یک مجموعه را تغییر نام دهید، میتوانید با استفاده از واسط برنامه نویسی (API) تغییر نام مجموعه 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") # خروجی: True
utility.has_collection("new_collection") # خروجی: False
اصلاح یک مجموعه
در حال حاضر، قابلیت TTL فقط در پایتون موجود است.
collection.set_properties(properties={"collection.ttl.seconds": 1800})
مثال فوق مدت اعتبار مجموعه را به 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")
تغییر یک نام مستعار مجموعه
تغییر دادن یک نام مستعار موجود برای اشاره به یک مجموعه دیگر. مثال زیر بر اساس سناریو است که نام مستعار publication
در ابتدا برای یک مجموعه دیگر ایجاد شده بود.
from pymilvus import utility
utility.alter_alias(
collection_name = "book",
alias = "publication"
)
بارگذاری یک مجموعه
راهنمای بارگذاری یک مجموعه در حافظه قبل از انجام عملیات جستجو یا پرس و جو. در Milvus، همه عملیات جستجو و پرس و جو در حافظه انجام میشود.
Milvus امکان بارگذاری مجموعهها به عنوان رپلیکاهای چندگانه را برای استفاده از منابع اضافی CPU و حافظه نودهای پرس و جو فراهم میکند. این ویژگی بهبود کلی 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()