Cấu hình bộ nhớ đệm (Cache) cho truy vấn thường xuyên
Qdrant sử dụng bộ nhớ đệm (Cache) để lưu trữ kết quả tìm kiếm và điểm số (score) trong RAM, giúp giảm độ trễ cho các truy vấn lặp lại.
Tham số quan trọng nhất nằm trong file cấu hình chính `config.yaml`. Chúng ta sẽ điều chỉnh kích thước cache và chiến lược xóa (eviction policy).
1. Chỉnh sửa file cấu hình chính
Đường dẫn file: /qdrant/config/config.yaml (trong container) hoặc /opt/qdrant/config/config.yaml (khi cài đặt trực tiếp).
Tại sao: Tăng kích thước cache cho phép lưu giữ nhiều kết quả truy vấn hơn, giảm tải cho việc tính toán lại điểm số vector (reranking) khi người dùng tìm kiếm lại cùng một từ khóa.
Đoạn cấu hình cần thêm hoặc sửa trong file config.yaml:
cache:
collection:
# Kích thước tối đa của cache cho metadata collection (MB)
# Default: 1024, tăng lên nếu RAM server > 16GB
max_collection_cache_size_mb: 2048
# Chiến lược xóa: lru (Least Recently Used) hoặc random
cache_policy: lru
# Cache cho query results (score, point IDs)
query:
# Kích thước tối đa (MB)
max_query_cache_size_mb: 512
# Thời gian sống của entry cache (giây), 0 = vô hạn
max_query_cache_ttl_sec: 3600
Kết quả mong đợi: Sau khi reload, Qdrant sẽ sử dụng thêm 2GB RAM cho cache collection và 512MB cho cache query. Các truy vấn lặp lại sẽ trả về kết quả gần như tức thì (sub-millisecond).
2. Verify hiệu quả Cache
Sử dụng API REST của Qdrant để kiểm tra thống kê cache.
curl -X GET http://localhost:6333/cluster/health
Kết quả: JSON trả về sẽ có trường cache_hits và cache_misses. Tỷ lệ hits cao chứng tỏ cache đang hoạt động hiệu quả.
Tối ưu hóa cấu hình Snapshot để giảm thời gian Backup
Snapshots là cơ chế backup toàn phần của Qdrant. Nếu cấu hình sai, việc backup có thể gây tắc nghẽn I/O và làm chậm hệ thống khi có nhiều điểm dữ liệu (points).
1. Cấu hình Snapshot tự động
Đường dẫn file: /qdrant/config/config.yaml.
Tại sao: Qdrant sử dụng mechanism "copy-on-write" cho snapshots. Cấu hình snapshot_interval giúp tự động hóa quá trình này mà không cần can thiệp thủ công, giảm rủi ro mất dữ liệu.
Đoạn cấu hình cần thêm vào config.yaml:
snapshot:
# Thời gian giữa các lần snapshot tự động (phút)
snapshot_interval: 60
# Số lượng snapshot giữ lại (lưu trữ trên disk)
max_snapshots_to_keep: 5
# Đường dẫn lưu snapshot (relative path trong config dir)
storage_path: ./snapshots
# Kích thước tối đa của snapshot (MB) để giới hạn backup quá lớn
# 0 = không giới hạn (mặc định)
max_snapshot_size_mb: 0
# Loại snapshot: full hoặc incremental (Qdrant hiện tại hỗ trợ full cho collection)
type: full
Kết quả mong đợi: Hệ thống sẽ tự động tạo file snapshot-YYYY-MM-DD-HH-MM-SS.tar.gz mỗi giờ và xóa snapshot cũ nhất khi vượt quá 5 bản.
2. Tạo Snapshot thủ công với tối ưu hóa
Khi cần backup trước khi deploy hoặc update, sử dụng API với tham số wait để đảm bảo snapshot được tạo xong trước khi trả về.
curl -X POST "http://localhost:6333/collections/my_vector_collection/snapshot?wait=true"
Kết quả: API trả về JSON chứa đường dẫn file snapshot đã tạo. Tham số wait=true giúp đảm bảo file đã được ghi hoàn tất vào disk trước khi client nhận phản hồi.
Điều chỉnh tham số Indexing Speed vs Query Speed
Đây là bước quan trọng nhất để cân bằng giữa tốc độ ghi (write) và tốc độ đọc (read). Qdrant sử dụng cấu trúc dữ liệu HNSW (Hierarchical Navigable Small World) cho vector search.
1. Cấu hình HNSW khi tạo Collection
Khi tạo collection mới, bạn cần tinh chỉnh các tham số hnsw_config.
Tại sao: M và ef_construct ảnh hưởng trực tiếp đến chất lượng index và tốc độ xây dựng index. Giá trị cao hơn -> Query nhanh hơn, chất lượng cao hơn, nhưng Write chậm hơn và tốn RAM hơn.
Command để tạo collection với cấu hình tối ưu cho cân bằng (Balanced):
curl -X POST "http://localhost:6333/collections/balanced_collection" \
-H "Content-Type: application/json" \
-d '{
"vectors": {
"size": 1536,
"distance": "Cosine"
},
"hnsw_config": {
"m": 16,
"ef_construct": 200,
"ef": 10,
"full_scan_threshold": 10000
},
"optimizers_config": {
"memmap_threshold": 1000000,
"max_optimization_steps": 100,
"default_segment_number": 10,
"vacuum_min_vector_number": 10000
}
}'
Kết quả mong đợi: Collection được tạo với cấu hình HNSW. ef_construct: 200 giúp xây dựng index khá nhanh, trong khi ef: 10 đảm bảo query rất nhanh. full_scan_threshold: 10000 nghĩa là nếu số điểm < 10000, Qdrant sẽ scan toàn bộ (linear scan) thay vì dùng index để đảm bảo độ chính xác tuyệt đối.
2. Điều chỉnh Optimizers cho tốc độ ghi
Tham số optimizers_config kiểm soát cách Qdrant gom nhóm (merge) các segment file.
Tại sao: Nếu default_segment_number quá nhỏ, các segment sẽ lớn nhanh, gây ra quá trình merge tốn tài nguyên. Tăng con số này giúp ghi nhanh hơn nhưng tăng bộ nhớ.
Command để cập nhật cấu hình của collection hiện có (tối ưu cho Write-heavy):
curl -X PUT "http://localhost:6333/collections/my_collection/config" \
-H "Content-Type: application/json" \
-d '{
"optimizers_config": {
"memmap_threshold": 2000000,
"max_optimization_steps": 200,
"default_segment_number": 20,
"vacuum_min_vector_number": 20000,
"indexing_threshold": 10000
}
}'
Kết quả mong đợi: Qdrant sẽ trì hoãn việc tối ưu hóa (merge) cho đến khi có 20 segment hoặc 20000 vector, giúp tăng thông lượng ghi (write throughput) đáng kể trong các giai đoạn nạp dữ liệu ban đầu.
3. Verify hiệu năng Indexing
Đẩy 1000 vector và đo thời gian.
curl -X PUT "http://localhost:6333/collections/my_collection/points" \
-H "Content-Type: application/json" \
-d '{
"points": [
{"id": 1, "vector": [0.1, 0.2, 0.3]},
{"id": 2, "vector": [0.4, 0.5, 0.6]}
]
}'
Kết quả: Thời gian phản hồi < 50ms cho 2 điểm. Nếu bạn push 1000 điểm, thời gian nên dưới 1 giây với cấu hình tối ưu trên.
Sử dụng Qdrant Cloud hoặc Local Cluster để mở rộng quy mô
Để vượt qua giới hạn của một máy chủ đơn lẻ (single node), bạn cần triển khai Qdrant dưới dạng Cluster. Qdrant sử dụng Raft consensus algorithm để đồng bộ dữ liệu.
1. Triển khai Local Cluster (3 Node) với Docker Compose
Tạo file docker-compose.yaml trong thư mục dự án.
Tại sao: Mô hình 3 node đảm bảo tính khả dụng (availability) cao nhất. Nếu 1 node chết, 2 node còn lại vẫn duy trì hệ thống (quorum = 2).
version: "3.8"
services:
qdrant-node-1:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
- "6334:6334"
volumes:
- qdrant-storage-1:/qdrant/storage
environment:
- QDRANT__CLUSTER__ENABLED=true
- QDRANT__CLUSTER__PEER__ADDRESS=0.0.0.0
- QDRANT__CLUSTER__PEER__SNAPSHOT__TRANSFER__SLOT__SIZE=4
- QDRANT__CLUSTER__PEERS__LIST=http://qdrant-node-1:6334,http://qdrant-node-2:6334,http://qdrant-node-3:6334
- QDRANT__CLUSTER__PEER__ID=1
- QDRANT__CLUSTER__SNAPSHOT__BOOTSTRAP__WAIT__TIMEOUT=10
- QDRANT__CLUSTER__SNAPSHOT__BOOTSTRAP__SOURCE__PEER=http://qdrant-node-1:6334
networks:
- qdrant-net
qdrant-node-2:
image: qdrant/qdrant:latest
volumes:
- qdrant-storage-2:/qdrant/storage
environment:
- QDRANT__CLUSTER__ENABLED=true
- QDRANT__CLUSTER__PEER__ADDRESS=0.0.0.0
- QDRANT__CLUSTER__PEERS__LIST=http://qdrant-node-1:6334,http://qdrant-node-2:6334,http://qdrant-node-3:6334
- QDRANT__CLUSTER__PEER__ID=2
- QDRANT__CLUSTER__SNAPSHOT__BOOTSTRAP__SOURCE__PEER=http://qdrant-node-1:6334
networks:
- qdrant-net
qdrant-node-3:
image: qdrant/qdrant:latest
volumes:
- qdrant-storage-3:/qdrant/storage
environment:
- QDRANT__CLUSTER__ENABLED=true
- QDRANT__CLUSTER__PEER__ADDRESS=0.0.0.0
- QDRANT__CLUSTER__PEERS__LIST=http://qdrant-node-1:6334,http://qdrant-node-2:6334,http://qdrant-node-3:6334
- QDRANT__CLUSTER__PEER__ID=3
- QDRANT__CLUSTER__SHARDS__TRANSFER__SLOT__SIZE=4
- QDRANT__CLUSTER__SNAPSHOT__BOOTSTRAP__SOURCE__PEER=http://qdrant-node-1:6334
networks:
- qdrant-net
networks:
qdrant-net:
volumes:
qdrant-storage-1:
qdrant-storage-2:
qdrant-storage-3:
Kết quả mong đợi: Chạy lệnh docker-compose up -d. Node 1 sẽ khởi động, Node 2 và 3 sẽ tự động kết nối và đồng bộ trạng thái từ Node 1. Cluster sẽ ở trạng thái healthy sau 30-60 giây.
2. Tạo Collection với Sharding trong Cluster
Trong môi trường Cluster, bạn cần chỉ định shard_number và replication_factor để dữ liệu được phân tán.
Tại sao: Sharding giúp chia nhỏ dữ liệu vector lên nhiều node, tăng khả năng mở rộng. Replication đảm bảo dữ liệu được sao chép trên các node khác nhau để phòng ngừa mất mát.
curl -X POST "http://localhost:6333/collections/scalable_collection" \
-H "Content-Type: application/json" \
-d '{
"vectors": {
"size": 1536,
"distance": "Cosine"
},
"shard_number": 3,
"replication_factor": 2,
"sharding_method": "auto"
}'
Kết quả mong đợi: Collection được tạo với 3 shards chính (primary shards) và 2 bản sao (replicas). Tổng cộng có 6 shards vật lý được phân bố trên 3 nodes. Qdrant tự động cân bằng tải (load balancing) khi bạn thêm dữ liệu.
3. Verify Cluster Health
Kiểm tra trạng thái của các nodes và shards.
curl -X GET "http://localhost:6333/collections/scalable_collection/shards"
Kết quả: JSON trả về danh sách các shards, trạng thái state (Active/Partial/Dead) và peer_id nơi shard đó đang lưu trữ. Tất cả shards phải ở trạng thái Active.
4. Mở rộng với Qdrant Cloud
Nếu không muốn tự quản lý cluster, bạn có thể chuyển sang Qdrant Cloud (managed service).
Thao tác: Đăng ký tại cloud.qdrant.com -> Chọn Create Cluster -> Chọn Scale (tăng số node) -> Copy API_KEY.
Để kết nối code hiện có với Cloud, chỉ cần thay đổi host và thêm api_key trong header request:
curl -X POST "https://your-cluster-id.qdrant.tech/collections/test_collection" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{...config...}'
Kết quả: Dữ liệu được đồng bộ lên cloud, hệ thống tự động xử lý scaling, backup và monitoring mà không cần can thiệp vào hạ tầng server.
Điều hướng series:
Mục lục: Series: Triển khai Database Vector đa mô hình với Qdrant trên Ubuntu 24.04
« Phần 3: Triển khai tính năng đa mô hình với Hybrid Search
Phần 5: Troubleshooting, giám sát và các mẹo nâng cao »