คอลเลกชัน

แนวคิดของคอลเลกชันในฐานข้อมูลเวกเตอร์ 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