Bỏ qua để đến nội dung
Search & RAG

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 vector6.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ụcNội dung
7.1Qdrant là gì, và khi nào đừng dùngVị trí trong ngăn xếp, so với pgvector/Milvus/Weaviate/Elasticsearch
7.2Collection, point, vector, payloadBốn khái niệm, và các quyết định không thể sửa về sau
7.3Nhiều biểu diễn trên một pointNamed vector, sparse vector, multivector — và BM25 chạy ngay trong Qdrant
#MụcNội dung
7.4Segment — đơn vị thật của QdrantKhái niệm quan trọng nhất phần này. Appendable, id mapper, versioning
7.5WAL, flush, và ý nghĩa của waitDữ liệu của bạn “an toàn” từ đúng thời điểm nào
7.6Optimizer: ba loại, và vì sao latency nhấp nháyVacuum / merge / indexing, proxy segment, prevent_unoptimized
7.7HNSW trong Qdrantm, ef_construct, hnsw_ef, và đơn vị KB rất dễ hiểu sai
7.8Filterable HNSW và query plannerThứ Qdrant làm khác nhất. Cardinality, full_scan_threshold, ACORN
7.9Payload indexTám loại, is_tenant / is_principal, và vì sao thứ tự tạo index quan trọng
7.10Mô hình bộ nhớ: pinned / cached / coldMemory tier, datatype vs quantization_config, inline storage
#MụcNội dung
7.11Query API và prefetchMột API thay cho năm endpoint cũ; cascade nhiều tầng
7.12Hybrid: RRF và DBSFCông thức thật của cả hai, và bẫy fusion trong cụm phân tán
7.13Filtering: mệnh đề và điều kiệnmust/should/must_not/min_should, nested, và bẫy mảng object
7.14Formula, grouping, facetRanking theo nghiệp vụ, gom nhóm, đếm — và chỗ chúng phá điểm số
#MụcNội dung
7.15Phân tán: shard, replica, RaftRaft quản cái gì, và cái gì không đi qua Raft
7.16Consistency: núm vặn và giá của chúngconsistency, ordering, write_consistency_factor
7.17MultitenancyPayload partitioning, tenant index, tiered multitenancy cho “khách cá voi”
7.18Toán tài nguyên và sizingRAM/disk thật sự cần bao nhiêu, và cách kiểm chứng
7.19Snapshot và phục hồiSnapshot là gì, priority, và ràng buộc phiên bản khi restore
7.20Bảo mật, quan sát, checklist productionAPI key, TLS, JWT RBAC, /metrics, và SSRF qua snapshot
7.21Bảng quyết địnhTình huống → cấu hình, kèm thứ tự chẩn đoán khi hệ chậm

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 / memory khô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.

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êm củ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.