คอลเลกชัน
แนวคิดของคอลเลกชันในฐานข้อมูลเวกเตอร์ Qdrant สามารถเปรียบเทียบกับโครงสร้างของตารางใน MYSQL ที่ใช้เก็บข้อมูลเวกเตอร์ประเภทเดียวกันอย่างถูกต้อง แต่ละชิ้นข้อมูลที่เก็บอยู่ในคอลเลกชันถูกอ้างถึงว่าเป็นจุดใน Qdrant ที่นี่ จุดเปรียะเสมือนกับแนวคิดของพื้นที่เรขาคณิตศาสตร์ ซึ่งแทนการแทนของเวกเตอร์ในพื้นที่เรขาคณิตศาสตร์ (เพียงแค่พิจารณาว่าเป็นข้อมูลชิ้นหนึ่ง)
ในคอลเลกชันเดียวกัน จุดแต่ละจุดของเวกเตอร์ต้องมีขนาดเดียวกันและถูกเปรียบเทียบโดยใช้เมตริกเดียวกัน สามารถใช้เวกเตอร์ที่มีชื่อเพื่อรวมเวกเตอร์หลายๆ รายการในจุดเดียวกัน โดยที่แต่ละเวกเตอร์มีขนาดและเงื่อนไขการวัดเมตริกของตัวเอง
การวัดระยะห่างใช้วัดความคล้ายคลึงระหว่างเวกเตอร์ การเลือกเมตริกขึ้นอยู่กับว่าเวกเตอร์ได้อย่างไรโดยเฉพาะการใช้วิธีการฝึกอบรมเอนโค้ดเดอร์จากเครือข่ายประสาท
Qdrant รองรับประเภทเมตริกที่นิยมต่อไปนี้:
- การคูณจุด: Dot
- ความคล้ายคลึงคอซายน์: Cosine
- ระยะยุคลิเดียน: Euclid
เพื่อเพิ่มประสิทธิภาพในการค้นหา ความคล้ายคลึงคอซายน์ถูกบรรเทาโดยการดำเนินการทำคูณจุดของเวกเตอร์ที่มีการปรับค่าเป็นหน่วย เมื่ออัปโหลดเวกเตอร์จะถูกปรับค่าเป็นหน่วยโดยอัตโนมัติ นอกจากเมตริกและขนาดเวกเตอร์แต่ละคอลเลกชันยังใช้ชุดพารามิเตอร์ของตัวเองเพื่อควบคุมการปรับปรุงคอลเลกชัน การสร้างดัชนีและการทำความสะอาด พารามิเตอร์เหล่านี้สามารถเปลี่ยนแปลงได้ตลอดเวลาผ่านคำขอที่เกี่ยวข้อง
การตั้งค่าการเช่าพื้นที่หลายแหล่ง
ควรสร้างคอลเลกชันกี่รายการ? โดยทั่วไป คุณเพียงจำเป็นที่จะสร้างคอลเลกชันเดียวด้วยการแบ่งพารามิเตอร์ตามเนื้อหาของข้อความ (Payload-based partitioning) วิธีนี้เรียกว่าการเช่าพื้นที่หลายแหลี่ สำหรับผู้ใช้ทั่วไป วิธีนี้มีประสิทธิภาพ แต่ต้องการการกำหนดค่าเพิ่มเติม ศึกษาวิธีการเช่าพื้นที่หลายแหล่ง
เมื่อควรสร้างคอลเลกชันหลายรายการ? เมื่อคุณมีจำนวนผู้ใช้ที่จำกัดและต้องการเขตความกัับแยก วิธีนี้มีความยืดหยุ่นมากขึ้น แต่อาจจะทำให้มีค่าใช้จ่ายมากขึ้น เนื่องจากการสร้างคอลเลกชันจำนวนมากอาจทำให้เสียความช่วยเรื่องทรัพยากรในบางกรณี นอกจากนี้คุณต้องให้ความสำคัญว่าพวกเขาไม่ได้ทำให้ผิดหวังเอินองกันในทุกรายละเอียด รวมทั้งๆ ก่อให้เกิดอาจมีผลกระทบต่อประสิทธิภาพ
การสร้างคอลเลกชัน
PUT /collections/{collection_name}
{
"vectors": {
"size": 300,
"distance": "Cosine"
}
}
นอกจากตัวเลือกที่จำเป็นอีกค่าแบบกำหนดค่าเฉพาะได้สำหรับตัวเลือกคอลเลกชันต่อไปนี้:
-
hnsw_config
- สำหรับรายละเอียดดัชนี โปรดอ้างถึงส่วนดัชนี. -
wal_config
- การกำหนดท่าทางที่เกี่ยวข้องกับการบันทึกล่วงหน้าของการเขียน. สำหรับข้อมูลที่ละเอียดมากเกี่ยวกับ WAL โปรดอ้างอิงไปที่นี่. -
optimizers_config
- สำหรับรายละเอียดของการปรับปรุงเป็นอิ่ม โปรดอ้างอิงไปที่ส่วนตัวปรับปรุง. -
shard_number
- กำหนดจำนวนชิ้นที่คอลเลกชันควรมี สำหรับข้อมูลเพิ่มเติมโปรดอ้างอิงไปที่ส่วนการกระจายการใช้งาน. -
on_disk_payload
- กำหนดตำแหน่งสำหรับเก็บข้อมูลเพียงเบื้องเผา. หากตั้งค่าเป็นtrue
มันจะเก็บข้อมูลภาระบนดิสก์เท่านั้น นี้สามารถสะดวกในการจำกัดการใช้อาร์เอ็มเมื่อดำเนินการกับข้อมูลปริมาณมาก. -
แบบปริมาณกำหนด
- สำหรับข้อมูลรายละเอียดเกี่ยวกับข้อมูลปริมาณ โปรดอ้างอิงไปที่ส่วนของแบบปริมาณ.
พารามิเตอร์เริ่มต้นสำหรับพารามิเตอร์สำหรับชุดตัวเลือกคอลเลกชันทางเลือกนี้ถูกกำหนดไว้ในไฟล์กำหนดค่า.
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ของคอลเลกชันและเวกเตอร์ โปรดดูการกำหนดสกีม่าและไฟล์กำหนดค่า.
มีจำหน่ายตั้งแต่ v1.2.0
เวกเตอร์ถูกจัดเก็บในแรมเพื่อทำให้การเข้าถึงเร็วมาก พารามิเตอร์on_disk
สามารถตั้งค่าได้ในการกำหนดเวกเตอร์ หากตั้งค่าเป็นจริง ข้อมูลทุกเวกเตอร์จะถูกจัดเก็บบนดิสก์ นี้จะทำให้สามารถใช้การทำแมปที่ดีมากสำหรับนำข้อมูลปริมาณมากๆ
การสร้างคอลเลกชันจากคอลเลกชันอื่น
มีจำหน่ายตั้งแต่ v1.0.0
คอลเลกชันสามารถเริ่มต้นมาจากคอลเลกชันที่มีอยู่แล้ว
น่าใจด้วยสำหรับการลองดูกับสุดมากจากชุดคำตคำดียงเดียวกัน
เมื่อตั่งค่าเฉพาะเวกเตอร์ในคอลเลกชันใหม่ ตระดต้อให้เอินให้แน่ใจว่าเวกเตอร์มีขนาดเดียวกันและฟังชั่นระยะทางเพียงเดียวกับในคอลเลกชันเดิม
PUT /collections/{collection_name}
{
"vectors": {
"size": 300,
"distance": "Cosine"
},
"init_from": {
"collection": {from_collection_name}
}
}
การรวมข้อมูลหลายมิติ
สามารถใช้ได้ตั้งแต่ v0.10.0
แต่ละรายการสามารถมีเวกเตอร์หลายตัวได้ คุณลักษณะนี้ทำให้เราสามารถเก็บเวกเตอร์หลายตัวในคอลเล็กชันได้ ในการแยกแยะเวกเตอร์ภายในรายการ ให้กำหนดชื่อที่ไม่ซ้ำกันเมื่อสร้างคอลเล็กชัน เวกเตอร์ที่ชื่อแตกต่างกันภายใต้สกีม่านี้จะมีระยะห่างและขนาดของตัวเอง:
PUT /collections/{collection_name}
{
"vectors": {
"image": {
"size": 4,
"distance": "Dot"
},
"text": {
"size": 8,
"distance": "Cosine"
}
}
}
สำหรับกรณีพิเศษ เรายังสามารถสร้างคอลเล็กชันที่ไม่มีการจัดเก็บเวกเตอร์ได้
สามารถใช้ได้ตั้งแต่ v1.1.1
สำหรับแต่ละเวกเตอร์ที่มีชื่อ คุณสามารถระบุ hnsw_config
หรือ quantization_config
ตามต้องการเพื่อแตกต่างจากการกำหนดค่าคอลเล็กชัน นี้สามารถใช้ในการปรับปรุงประสิทธิภาพในการค้นหาที่ระดับเวกเตอร์
สามารถใช้ได้ตั้งแต่ v1.2.0
เวกเตอร์ถูกเก็บไว้ในหน่วยความจำเพื่อให้สามารถเข้าถึงได้ด้วยความเร็วโดยทันที สำหรับแต่ละเวกเตอร์ on_disk
สามารถตั้งค่าเป็น true
เพื่อเก็บเวกเตอร์ทั้งหมดไว้บนดิสก์เสมอ นี่จะเปิดใช้งานการแมปหน่วยความจำ เหมาะสำหรับการนำเข้าข้อมูลจำนวนมาก
ลบคอลเล็กชัน
DELETE /collections/{collection_name}
อัพเดตพารามิเตอร์ของคอลเล็กชัน
การอัพเดตพารามิเตอร์แบบไดนามิกสามารถเป็นประโยชน์ เช่น การโหลดเวกเตอร์เริ่มต้นให้มีประสิทธิภาพมากขึ้น ตัวอย่างเช่น คุณสามารถปิดการทำดัชนีระหว่างการอัพโหลดและเปิดใช้งานทันทีหลังจากที่อัพโหลดเสร็จสิ้น โดยเช่นนี้คุณจะไม่เสียทรัพยากรคอมพิวเตอร์เพิ่มเติมในการสร้างดัชนีขึ้นมาใหม่
คำสั่งต่อไปนี้เปิดใช้การทำดัชนีสำหรับเซกเมนต์ที่มีเวกเตอร์มีขนาดใหญ่กว่า 10000 kB:
PATCH /collections/{collection_name}
{
"optimizers_config": {
"indexing_threshold": 10000
}
}
พารามิเตอร์ต่อไปนี้สามารถอัพเดตได้:
-
optimizers_config
- ดูคำอธิบายรายละเอียดของตัวเลือกทำเล็บ -
hnsw_config
- ดูคำอธิบายรายละเอียดของดัชนี -
quantization_config
- ดูคำอธิบายรายละเอียดของการควักเทียน -
vectors
- การกำหนดค่าสำหรับเวกเตอร์ที่เฉพาะเจาะจง รวมถึงhnsw_config
,quantization_config
, และตั้งค่าon_disk
ของแต่ละเวกเตอร์ -
params
- พารามิเตอร์คอลเล็กชันอื่น ๆ รวมถึงwrite_consistency_factor
และon_disk_payload
สามารถหาข้อมูลสเปค API ที่เต็มอยู่ใน schema definitions
สามารถใช้ได้ตั้งแต่ v1.4.0
Qdrant เวอร์ชัน 1.4 เพิ่มการสนับสนุนในการอัพเดตพารามิเตอร์ของคอลเล็กชันมากขึ้นที่เริ่มทำงานแบบไดนามิก เดี๋ยวนี้ HNSW index, การควักเทียน และการกำหนดค่าดิสก์สามารถเปลี่ยนแปลงได้โดยไม่ต้องสร้างคอลเล็กชันใหม่ เซกเมนต์ (พร้อมกับข้อมูลดัชนีและควักเทียน) จะถูกสร้างขึ้นโดยอัตโนมัติในภายหลังเพื่อให้ตรงกับพารามิเตอร์ที่อัพเดตแล้ว
ในตัวอย่างต่อไปนี้ คอลเล็กชันทั้งหมดและพารามิเตอร์ HNSW index และ ควักเทียน สำหรับ my_vector
ถูกอัพเดต:
PATCH /collections/{collection_name}
{
"vectors": {
"my_vector": {
"hnsw_config": {
"m": 32,
"ef_construct": 123
},
"quantization_config": {
"product": {
"compression": "x32",
"always_ram": true
}
},
"on_disk": true
}
},
"hnsw_config": {
"ef_construct": 123
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.8,
"always_ram": false
}
}
}
หมายเหตุ: เพื่ออัพเดตพารามิเตอร์เวกเตอร์ในคอลเล็กชันที่ไม่มีเวกเตอร์ที่มีชื่อ สามารถใช้ชื่อว่าว่าง (""
)
การเรียกใช้สำหรับจุดปลายทางนี้อาจบล็อกตัวเลือก เนื่องจากมันรอให้ตัวเลือกทำเล็บที่อยู่ในขณะนี้เสร็จสิ้น เราไม่ขอแนะนำให้ใช้คุณลักษณะนี้ในฐานข้อมูลที่ใช้งานจริงเพราะการสร้างดัชนีใหม่อาจก่อให้เกิดค่าใช้ทรัพยากรที่สำคัญ
ข้อมูลการเก็บข้อมูล
Qdrant ช่วยให้เราสามารถกำหนดพารามิเตอร์การกำหนดค่าสำหรับคอลเล็กชันที่มีอยู่เพื่อเข้าใจการกระจายของจุดและสถานการดัเก็บข้อมูล
GET /collections/{collection_name}
{
"result": {
"status": "green",
"optimizer_status": "ok",
"vectors_count": 1068786,
"indexed_vectors_count": 1024232,
"points_count": 1068786,
"segments_count": 31,
"config": {
"params": {
"vectors": {
"size": 384,
"distance": "Cosine"
},
"shard_number": 1,
"replication_factor": 1,
"write_consistency_factor": 1,
"on_disk_payload": false
},
"hnsw_config": {
"m": 16,
"ef_construct": 100,
"full_scan_threshold": 10000,
"max_indexing_threads": 0
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": 20000,
"flush_interval_sec": 5,
"max_optimization_threads": 1
},
"wal_config": {
"wal_capacity_mb": 32,
"wal_segments_ahead": 0
}
},
"payload_schema": {}
},
"status": "ok",
"time": 0.00010143
}
If มีการเพิ่มเวกเตอร์เข้าสู่คอลเล็กชัน ที่มี field status
อาจจะเปลี่ยนเป็น "yellow" ระหว่างทำการปรับปรุง และจะกลับมาเป็น "green" เมื่อทุกจุดได้รับการประมวลผลเรียบร้อย
สถานะสีต่าง ๆ ที่อาจพบได้คือ:
- ?
green
: คอลเล็กชันพร้อมใช้งาน - ?
yellow
: คอลเล็กชันกำลังถูกปรับปรุง - ?
red
: Engine พบข้อผิดพลาดที่ไม่สามารถกู้คืนได้
คุณสมบัติอื่น ๆ ที่น่าสนใจ ได้แก่:
-
points_count
- จำนวนทั้งหมดของอ็อบเจ็กต์ (เวกเตอร์และพลังงาน) ที่เก็บไว้ในคอลเล็กชัน -
vectors_count
- จำนวนทั้งหมดของเวกเตอร์ในคอลเล็กชัน หากแต่ละอ็อบเจ็กต์มีหลายเวกเตอร์ อาจจะไม่เท่ากับpoints_count
-
indexed_vectors_count
- จำนวนทั้งหมดของเวกเตอร์ที่เก็บไว้ในดัชชั่น HNSW Qdrant ไม่เก็บเวกเตอร์ทั้งหมดในดัชชั่น แต่เพียงเพียงเฉพาะเวกเตอร์ที่สร้างเซ็กเม้นต์ดังกล่าวจากกำหนดค่าที่ให้มา
ดัชชั่นของเวกเตอร์ใน HNSW
ในบางกรณี คุณอาจพบว่าค่าของ indexed_vectors_count
น้อยกว่า vectors_count
นั้นเป็นพฤติกรรมตามเจตคำสั่งของโปรแกรม ดังนั้น เซ็กเม้นต์ดัชชั่นใหม่จะถูกสร้างขึ้นหากขนาดของเวกเตอร์ที่ยังไม่ได้ทำดัชชั่นเกิน indexing_threshold
(ใน KB) หากปรับค่าของ indexing_threshold
ลงในพารามิเตอร์ของคอลเล็กชัน การสร้างดัชชั่นใหม่จะเกิดขึ้นและเข้าไปในคอลเล็กชันที่มีอยู่
การตั้งชื่อแทนคอลเล็กชัน
ในสภาพแวดล้อมการใช้งานจริง อาจมีความจำเป็นต้องสลับไปมาอย่างนุ่มนวลระหว่างเวอร์ชันต่าง ๆ ของเวกเตอร์ เช่นการอัพเกรดไปเป็นเวอร์ชันใหม่ของเครือข่ายประสาทเทียม
ในกรณีเหล่านี้ อาจจะไม่สามารถหยุดบริการและสร้างโครงสร้างใหม่โดยใช้เวกเตอร์เวอร์ชันใหม่ Alias คือชื่อเพิ่มเติมสำหรับคอลเล็กชันที่มีอยู่ การค้นหาสามารถดำเนินการได้แบบเต็มรูปแบบโดยใช้ alias แทนชื่อคอลเล็กชัน
ดังนั้น คอลเล็กชันเป็นอส้มด้านหลังจะถูกสร้างขึ้น แล้ว alias สามารถถูกเปลี่ยนจากคอลเล็กชันเก่าไปยังคอลเล็กชันใหม่ เนื่องจากการเปลี่ยนแปลง alias เป็นคำสั่งอะตอมพร้อมกัน การคำขอที่เกิดขึ้นพร้อมกันจะไม่มีผลต่อระหว่างการสลับที่จัดการกลางขึ้นตลอดกระบวนการที่ทำการเปลี่ยนแปลง
ทำการสร้าง Alias
POST /collections/aliases
{
"actions": [
{
"create_alias": {
"alias_name": "production_collection",
"collection_name": "example_collection"
}
}
]
}
ลบ Alias
POST /collections/aliases
{
"actions": [
{
"delete_alias": {
"alias_name": "production_collection"
}
}
]
}
สลับคอลเล็กชัน
การดำเดินการที่เกิดขึ้นใน alias มีอยู่หลายคำขอที่เรียกหลักทรงอนามัครได้ ตัวอย่างเช่น คุณสามารถใช้คำสั่งต่อไปนี้สลับคอลเล็กชันพื้นฐานได้:
POST /collections/aliases
{
"actions": [
{
"delete_alias": {
"alias_name": "production_collection"
}
},
{
"create_alias": {
"alias_name": "production_collection",
"collection_name": "new_collection"
}
}
]
}
รายการคอลเลกชันชื่อเลียนแบบ
GET /collections/{collection_name}/aliases
รายการเลียนแบบทั้งหมด
GET /aliases
รายการคอลเลกชันทั้งหมด
GET /collections