Milvus là một hệ thống cơ sở dữ liệu vector mã nguồn mở, được thiết kế đặc biệt để lưu trữ, quản lý và thực hiện truy vấn nhanh trên dữ liệu vector chiều cao — đặc biệt là các tác vụ tìm kiếm láng giềng gần nhất xấp xỉ (ANN). Với kiến trúc phân tán, tối ưu phần cứng và hỗ trợ đa mô hình, Milvus trở thành lựa chọn hàng đầu trong các ứng dụng AI như hệ thống gợi ý, xử lý ngôn ngữ tự nhiên (NLP), thị giác máy tính và xây dựng hệ thống RAG.
1. Vai trò của embeddings và dữ liệu phi cấu trúc
Dữ liệu phi cấu trúc — bao gồm văn bản, hình ảnh, âm thanh — không có khuôn dạng cố định và chứa thông tin ngữ nghĩa phong phú. Để khai thác giá trị từ loại dữ liệu này, các mô hình học sâu thường chuyển đổi chúng thành các vector đặc trưng (embeddings), mỗi vector đại diện cho một mẫu dữ liệu dưới dạng dãy số thực. Milvus cung cấp lớp lưu trữ chuyên biệt để quản lý những vector này cùng các thuộc tính bổ sung (metadata), cho phép truy vấn kết hợp giữa tìm kiếm tương tự và lọc có điều kiện — tất cả trong một hệ thống duy nhất.
2. Kiến trúc phân tầng và khả năng mở rộng
Hệ thống Milvus áp dụng mô hình kiến trúc microservices với các thành phần độc lập về chức năng và triển khai:
- Proxy: Tiếp nhận yêu cầu từ client, xác thực và phân phối đến các node phù hợp.
- Root Coordinator: Quản lý vòng đời collection, schema và phân phối công việc.
- DataNode: Chịu trách nhiệm ghi/đọc dữ liệu thô và đảm bảo tính nhất quán qua cơ chế WAL.
- QueryNode: Thực thi truy vấn ANN trên bộ nhớ hoặc ổ đĩa, sử dụng các thuật toán như HNSW, IVF_FLAT hoặc DISKANN.
- IndexNode: Xây dựng và cập nhật chỉ mục theo chiến lược định kỳ hoặc theo sự kiện.
- MetaStore: Lưu metadata bằng etcd — đảm bảo tính nhất quán phân tán.
- Object Storage: Lưu dữ liệu và chỉ mục trên MinIO, S3 hoặc hệ thống lưu trữ đối tượng tương thích.
Tất cả các thành phần đều không trạng thái (stateless), cho phép mở rộng ngang (horizontal scaling) linh hoạt trên Kubernetes hoặc môi trường cloud mà không cần tái cân bằng dữ liệu thủ công.
3. Mô hình dữ liệu: Collection, Schema và Fields
Milvus tổ chức dữ liệu theo ba khái niệm cốt lõi:
Collection
Tương đương với một bảng trong cơ sở dữ liệu quan hệ — là đơn vị lưu trữ logic chứa các bản ghi đồng nhất về cấu trúc. Mỗi collection có thể chứa hàng tỷ vector, kèm theo các trường thuộc tính phụ trợ.
Schema
Xác định cấu trúc của collection, bao gồm danh sách các field, kiểu dữ liệu, thuộc tính khóa chính và ràng buộc bắt buộc. Một schema hợp lệ phải chứa ít nhất một trường vector và một trường khóa chính (primary key).
Fields
Các trường trong schema được phân loại rõ ràng:
- Vector field: Kiểu
FLOAT_VECTORhoặcBINARY_VECTOR, bắt buộc phải khai báo số chiều (dim). Đây là trường dùng để tính toán độ tương đồng. - Scalar fields: Hỗ trợ nhiều kiểu như
INT64,VARCHAR,BOOL,JSON… giúp thực hiện lọc, phân nhóm hoặc đánh trọng số kết quả. - Primary key field: Là trường duy nhất, không null, được tự động lập chỉ mục — dùng để truy xuất điểm dữ liệu cụ thể.
Dưới đây là ví dụ tạo schema trong Python với pymilvus phiên bản mới:
from pymilvus import (
FieldSchema, CollectionSchema, DataType,
connections, Collection
)
# Định nghĩa các trường
id_field = FieldSchema(
name="doc_id",
dtype=DataType.INT64,
is_primary=True,
auto_id=False
)
vector_field = FieldSchema(
name="feature_vec",
dtype=DataType.FLOAT_VECTOR,
dim=768 # Phù hợp với embedding từ mô hình BERT
)
tag_field = FieldSchema(
name="category",
dtype=DataType.VARCHAR,
max_length=64
)
# Xây dựng schema
schema = CollectionSchema(
fields=[id_field, vector_field, tag_field],
description="Tập dữ liệu tài liệu kỹ thuật"
)
# Tạo collection
connections.connect("default", host="localhost", port="19530")
collection = Collection(name="tech_docs", schema=schema)
4. Các chế độ triển khai
Tùy vào quy mô dữ liệu và yêu cầu vận hành, Milvus cung cấp ba phương án triển khai:
- Milvus Lite: Thư viện nhúng trong-process, không cần container — lý tưởng cho phát triển nhanh hoặc edge deployment.
- Milvus Standalone: Một container Docker chứa toàn bộ dịch vụ (etcd + minio + milvus-server), phù hợp với môi trường dev/test hoặc dữ liệu dưới 100 triệu vector.
- Milvus Cluster: Triển khai phân tán trên Kubernetes, tách biệt hoàn toàn các layer compute/storage/meta — hỗ trợ quy mô hàng chục tỷ vector với độ sẵn sàng cao.
5. Các kiểu truy vấn nâng cao
Ngoài tìm kiếm ANN cơ bản, Milvus hỗ trợ:
- Lọc kết hợp: Sử dụng biểu thức boolean như
"category in ['AI', 'ML'] and score > 0.8". - Tìm kiếm bán kính: Trả về tất cả vector nằm trong khoảng cách Euclidean hoặc cosine threshold.
- Tìm kiếm đa trường: Gộp kết quả từ nhiều vector field khác nhau (ví dụ: tiêu đề + nội dung).
- Tìm kiếm toàn văn: Tích hợp bộ phân tích BM25 cho trường
VARCHARcó đánh chỉ mục. - Reranking: Áp dụng mô hình cross-encoder hoặc scoring rule sau bước ANN để cải thiện thứ hạng.
6. Yếu tố hiệu năng vượt trội
Tốc độ xử lý cao của Milvus đến từ năm yếu tố then chốt:
- Tối ưu phần cứng mức thấp: Hỗ trợ AVX-512, GPU-accelerated search (qua CUDA), và I/O tối ưu hóa cho NVMe SSD.
- Động cơ tìm kiếm C++ thuần: Hơn 80% thời gian truy vấn nằm ở giai đoạn tính toán khoảng cách — được viết bằng C++ với vectorization và parallelization mức thread.
- Cấu trúc columnar: Chỉ đọc các cột cần thiết trong mỗi truy vấn, giảm I/O và tăng cache hit rate.
- Chỉ mục đa cấp: Kết hợp in-memory index (HNSW) với on-disk index (DISKANN) để cân bằng tốc độ và bộ nhớ.
- Quản lý bộ nhớ thông minh: Sử dụng memory-mapped files và adaptive buffer pool để kiểm soát tài nguyên động.
7. Triển khai Milvus Standalone trên Windows 10/11
Các bước cài đặt nhanh bằng Docker Desktop:
- Cài đặt Docker Desktop và kích hoạt WSL2.
- Mở PowerShell với quyền Administrator, chạy lệnh sau để tải script triển khai:
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.bat" -OutFile "milvus-start.bat"
- Khởi động dịch vụ:
.\milvus-start.bat start
Sau khi hoàn tất, Milvus sẽ lắng nghe tại localhost:19530. Các thành phần đi kèm:
- etcd nội bộ trên cổng
2379, cấu hình lưu tạiembedEtcd.yaml. - Dữ liệu được ánh xạ vào thư mục
volumes/milvustrong thư mục hiện tại.
Quản lý dịch vụ:
- Dừng:
.\milvus-start.bat stop - Gỡ bỏ hoàn toàn (bao gồm dữ liệu):
.\milvus-start.bat delete
8. Giao diện quản trị trực quan
Để tương tác trực quan với Milvus, bạn có thể cài đặt Attu — giao diện web mã nguồn mở do Zilliz phát triển. Phiên bản desktop (Windows/macOS) có thể tải từ trang phát hành chính thức. Sau khi cài đặt, kết nối tới http://localhost:19530 để khám phá collection, chạy truy vấn thử nghiệm và giám sát hiệu năng.