Phần 7 — Qdrant: từ mô hình dữ liệu đến vận hành
Hai mươi mốt mục về một hệ quản trị vector duy nhất. Không phải hướng dẫn “cài Docker rồi upsert 5 điểm” — chỗ đó docs chính thức làm tốt hơn. Phần này trả lời câu hỏi khác: bên trong Qdrant có gì, mỗi núm vặn đang đánh đổi cái gì, và vì sao hệ của bạn chậm/tốn RAM/mất recall.
Qdrant viết bằng Rust, mã nguồn mở (Apache 2.0), và là một trong số ít vector database mà bạn có thể đọc hiểu toàn bộ đường đi của một truy vấn. Bản mới nhất khi viết là v1.19.0, phát hành 2026-08-05 (GitHub releases).
Đọc khi nào. Sau Tầng 5 — ANN & hạ tầng vector và 6.1 — Quantization cho vector. Hai mục đó dạy cơ chế chung; Phần 7 dạy một cài đặt cụ thể của cơ chế đó. Nếu chỉ đọc được ba mục: 7.4, 7.8, 7.10.
Nhóm 1 — Định vị và mô hình dữ liệu
Phần tiêu đề “Nhóm 1 — Định vị và mô hình dữ liệu”| # | Mục | Nội dung |
|---|---|---|
| 7.1 | Qdrant là gì, và khi nào đừng dùng | Vị trí trong ngăn xếp, so với pgvector/Milvus/Weaviate/Elasticsearch |
| 7.2 | Collection, point, vector, payload | Bốn khái niệm, và các quyết định không thể sửa về sau |
| 7.3 | Nhiều biểu diễn trên một point | Named vector, sparse vector, multivector — và BM25 chạy ngay trong Qdrant |
Nhóm 2 — Bên trong: lưu trữ và index
Phần tiêu đề “Nhóm 2 — Bên trong: lưu trữ và index”| # | Mục | Nội dung |
|---|---|---|
| 7.4 | Segment — đơn vị thật của Qdrant | Khái niệm quan trọng nhất phần này. Appendable, id mapper, versioning |
| 7.5 | WAL, flush, và ý nghĩa của wait | Dữ liệu của bạn “an toàn” từ đúng thời điểm nào |
| 7.6 | Optimizer: ba loại, và vì sao latency nhấp nháy | Vacuum / merge / indexing, proxy segment, prevent_unoptimized |
| 7.7 | HNSW trong Qdrant | m, ef_construct, hnsw_ef, và đơn vị KB rất dễ hiểu sai |
| 7.8 | Filterable HNSW và query planner | Thứ Qdrant làm khác nhất. Cardinality, full_scan_threshold, ACORN |
| 7.9 | Payload index | Tám loại, is_tenant / is_principal, và vì sao thứ tự tạo index quan trọng |
| 7.10 | Mô hình bộ nhớ: pinned / cached / cold | Memory tier, datatype vs quantization_config, inline storage |
Nhóm 3 — Truy vấn
Phần tiêu đề “Nhóm 3 — Truy vấn”| # | Mục | Nội dung |
|---|---|---|
| 7.11 | Query API và prefetch | Một API thay cho năm endpoint cũ; cascade nhiều tầng |
| 7.12 | Hybrid: RRF và DBSF | Công thức thật của cả hai, và bẫy fusion trong cụm phân tán |
| 7.13 | Filtering: mệnh đề và điều kiện | must/should/must_not/min_should, nested, và bẫy mảng object |
| 7.14 | Formula, grouping, facet | Ranking theo nghiệp vụ, gom nhóm, đếm — và chỗ chúng phá điểm số |
Nhóm 4 — Vận hành
Phần tiêu đề “Nhóm 4 — Vận hành”| # | Mục | Nội dung |
|---|---|---|
| 7.15 | Phân tán: shard, replica, Raft | Raft quản cái gì, và cái gì không đi qua Raft |
| 7.16 | Consistency: núm vặn và giá của chúng | consistency, ordering, write_consistency_factor |
| 7.17 | Multitenancy | Payload partitioning, tenant index, tiered multitenancy cho “khách cá voi” |
| 7.18 | Toán tài nguyên và sizing | RAM/disk thật sự cần bao nhiêu, và cách kiểm chứng |
| 7.19 | Snapshot và phục hồi | Snapshot là gì, priority, và ràng buộc phiên bản khi restore |
| 7.20 | Bảo mật, quan sát, checklist production | API key, TLS, JWT RBAC, /metrics, và SSRF qua snapshot |
| 7.21 | Bảng quyết định | Tình huống → cấu hình, kèm thứ tự chẩn đoán khi hệ chậm |
Sợi chỉ xuyên suốt Phần 7
Phần tiêu đề “Sợi chỉ xuyên suốt Phần 7”Bốn câu, lặp lại từ nhiều góc:
1. Qdrant không có “một index”. Nó có nhiều segment, mỗi segment tự mang index riêng. Gần như mọi hành vi khó hiểu về latency đều giải thích được từ câu này.
2. Filter không phải là bước lọc sau khi tìm. Nó chạy bên trong quá trình đi đồ thị, và query planner có thể bỏ HNSW hoàn toàn. Không có payload index thì cả cơ chế này tắt.
3.
on_disk/memorykhông phải công tắc bật-tắt RAM. Nó là quyết định cái gì nằm ở tầng nào, và bật nén mà vẫn giữ vector gốc trong RAM thì bộ nhớ tăng.
4. Mặc định của Qdrant nghiêng về throughput và availability, không phải consistency. Đọc ngay sau khi ghi có thể không thấy dữ liệu. Đó là lựa chọn thiết kế, và bạn phải trả tiền nếu muốn khác.
Ràng buộc số liệu của phần này
Phần tiêu đề “Ràng buộc số liệu của phần này”Corpus của cẩm nang (data/corpus.jsonl, 50 tài liệu) quá nhỏ để đo bất cứ điều gì có
ý nghĩa về một vector database: HNSW trên 50 điểm chỉ là brute-force đội lốt, quantization
trên 50 vector không nói lên gì. Vì vậy:
Phần 7 không có số đo riêng. Mọi con số định lượng ở đây là số dẫn từ nguồn ngoài (docs Qdrant, blog kỹ thuật của Qdrant, paper), và luôn kèm link trong mục
Đọc thêmcủa trang tương ứng. Chỗ nào là toán tay, có nói rõ giả định.
Riêng các giá trị mặc định trong Phần 7 được lấy từ file
config/config.yaml tại tag v1.19.0
— nguồn gốc chứ không phải trang docs, vì trang docs đôi khi trễ hơn code.
Xem thêm Phụ lục — Sai số của tài liệu.