Milvus: Cơ sở dữ liệu vector mã nguồn mở hiệu năng cao cho tìm kiếm tương tự

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_VECTOR hoặc BINARY_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 VARCHAR có đá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:

  1. 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.
  2. Độ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.
  3. 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.
  4. 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ớ.
  5. 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:

  1. Cài đặt Docker Desktop và kích hoạt WSL2.
  2. 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"
  1. 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ại embedEtcd.yaml.
  • Dữ liệu được ánh xạ vào thư mục volumes/milvus trong 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.

Thẻ: Milvus vector-database ANN HNSW embeddings

Đăng vào ngày 21 tháng 6 lúc 18:54