คลาสของคอลเลกชันใน Milvus คล้ายกับตารางใน MySQL ซึ่งใช้ในการจัดระเบียบข้อมูล และประกอบด้วยหนึ่งหรือมากกว่าพาร์ทิชัน

การสร้างคอลเลกชัน

คอลเลกชันประกอบด้วยหนึ่งหรือมากกว่าพาร์ทิชัน ขณะสร้างคอลเลกชันใหม่ Milvus จะสร้างพาร์ทิชันเริ่มต้นที่ชื่อ _default สำหรับข้อมูลเพิ่มเติม โปรดอ้างอิงคำอธิบายคำศัพท์ - เกี่ยวกับคอลเลกชัน

ตัวอย่างต่อไปนี้จะสร้างคอลเลกชันที่ชื่อ book พร้อมกับพาร์ทิชันสองตัว รวมถึงฟิลด์พริมารี่คีย์ที่ชื่อ book_id ฟิลด์สกาเลอร์ที่ชื่อ word_count แบบ INT64 และฟิลด์เวกเตอร์ทวิรายที่ชื่อ 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 (ไม่จำเป็น) คำสั่งหมดเวลาของคอลเลกชันคือเวลาหมดอายุของคอลเลกชัน ข้อมุลในคอลเลกชันที่หมดอายุจะถูกลบและจะไม่มีส่วนร่วมในการค้นหาหรือคิวรี ระบุ TTL ในวินาที ค่าควรเป็น 0 หรือมากกว่า 0 หมายถึงปิด TTL

ข้อจำกัด

การกำหนดค่าของทรัพยากร

คุณลักษณะ ขีดจำกัดสูงสุด
ความยาวของชื่อคอลเลกชัน 255 ตัวอักษร
จำนวนของพาร์ติชันในคอลเลกชัน 4,096
จำนวนของฟิลด์ในคอลเลกชัน 64
จำนวนชาร์ดในคอลเลกชัน 16

พารามิเตอร์ default_value

  • default_value ใช้เฉพาะสำหรับฟิลด์ของตัวแปรพร้อมและตัวมิติที่ไม่ใช่ข้อมูล JSON
  • default_value ไม่ใช้กับคีย์หลัก
  • ประเภทข้อมูลของ default_value ต้องเหมือนกับประเภทข้อมูลที่ระบุไว้ที่ dtype มิฉะนั้น อาจเกิดข้อผิดพลาด
  • ในกรณีที่ใช้ auto_id, ไม่อนุญาตให้กำหนดค่าเริ่มต้นสำหรับฟิลด์ที่เหลือทั้งหมด กล่าวคือ เมื่อดำเนินการแทรกหรือปรับเปลี่ยนข้อมูล คุณจำเป็นต้องระบุค่าของอย่างน้อยหนึ่งฟิลด์ มิฉะนั้น อาจเกิดข้อผิดพลาด

เปลี่ยนชื่อของคอลเลกชัน

หากคุณต้องการเปลี่ยนชื่อของคอลเลกชัน คุณสามารถโต้ตอบกับ Milvus โดยใช้ API การเปลี่ยนชื่อของคอลเลกชัน คู่มือนี้จะช่วยให้คุณเข้าใจวิธีการใช้ 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")

แก้ไขชื่อย่อของคอลเลคชัน

แก้ไขชื่อย่อที่มีอยู่เพื่อชี้ไปที่คอลเลคชันอื่น ตัวอย่างต่อไปนี้เป็นตัวอย่างจากสถานการณ์ที่ชื่อย่อ publication ถูกสร้างขึ้นเพื่อชี้ไปที่คอลเลคชันอื่น

from pymilvus import utility
utility.alter_alias(
  collection_name = "book",
  alias = "publication"
)

โหลดคอลเลคชัน

วิธีที่ใช้ในการโหลดคอลเลคชันเข้าสู่หน่วยความจำก่อนดำเนินการค้นหาหรือคิวรี. ใน Milvus, การค้นหาและคิวรีทั้งหมดถูกรันบนหน่วยความจำ

Milvus อนุญาตให้ผู้ใช้โหลดคอลเลคชันเป็น repliac หลายตัวเพื่อใช้ทรัพยากร 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()