คลาสของคอลเลกชันใน 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()