کلاس 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()