Milvus: Cơ sở dữ liệu vector phân tán cho AI
Milvus là một cơ sở dữ liệu vector phân tán được xây dựng để chạy tìm kiếm approximate nearest-neighbor trên hàng tỷ embedding, và nó thực sự đáp ứng được khi bạn đẩy khối lượng truy vấn ở quy mô production vào hệ thống. Nên chọn Milvus nếu bạn cần mở rộng độc lập giữa node truy vấn và node dữ liệu trên Kubernetes; nên bỏ qua nếu một instance pgvector đơn lẻ đã đủ xử lý số lượng embedding của bạn.
Tìm hiểu về cơ sở dữ liệu vector Milvus
Milvus là một cơ sở dữ liệu vector mã nguồn mở, cloud-native, viết bằng Go và C++, lưu trữ embedding cùng các trường dữ liệu vô hướng như số nguyên, chuỗi và JSON, rồi phục vụ tìm kiếm nearest-neighbor trên tập dữ liệu đó ở quy mô lớn. Milvus chạy dưới dạng cluster phân tán, native trên Kubernetes cho môi trường production, hoặc dưới dạng Milvus Lite — một thư viện Python một-tệp bạn cài bằng `pip install` để dùng thử cục bộ.
Thách thức xử lý dữ liệu phi cấu trúc ở quy mô lớn
Các ứng dụng AI biến văn bản, hình ảnh hay dữ liệu phi cấu trúc khác thành vector cần một nơi lưu trữ và truy vấn số vector đó ở khối lượng mà một cơ sở dữ liệu thông thường không được thiết kế để xử lý — chính README của Milvus mô tả điều này là khả năng xử lý hàng chục nghìn truy vấn tìm kiếm trên hàng tỷ vector, trong khi vẫn giữ dữ liệu luôn mới nhờ cập nhật streaming thời gian thực. Khoảng trống cụ thể mà Milvus nhắm tới là mở rộng độc lập giữa phần đọc (tìm kiếm vector) nặng và phần ghi (nạp dữ liệu) nặng, bằng cách tách compute khỏi storage thay vì chạy cả hai trên cùng một node.
Các tính năng cốt lõi của Milvus
- ✓Kiến trúc phân tán tách compute khỏi storage, cho phép mở rộng node truy vấn cho tải đọc nhiều và node dữ liệu cho tải ghi nhiều một cách độc lập — đây là một đánh đổi kiểu hệ thống phân tán, không chỉ là một nút bấm scale.
- ✓Năm loại index trong cùng một engine — HNSW, IVF, FLAT (brute-force), SCANN và DiskANN — cùng các biến thể quantization và mmap, giúp hành vi tìm kiếm ANN có thể tinh chỉnh theo từng collection.
- ✓Lọc theo metadata và range search song song với tìm kiếm tương đồng vector, dành cho truy vấn cần thu hẹp kết quả theo trường vô hướng (giá, ngày tháng, danh mục...) trước hoặc trong lúc tìm nearest-neighbor.
- ✓Đánh index bằng GPU, bao gồm CAGRA của NVIDIA, cùng với tăng tốc phần cứng trên CPU.
- ✓Hybrid search có sẵn: kết hợp tìm kiếm tương đồng vector dạng dense với full-text search qua BM25 và sparse embedding kiểu SPLADE, BGE-M3, có thể lưu chung một collection và rerank kết quả.
- ✓Cách ly multi-tenant ở cấp database, collection, partition hoặc partition key — README nói một cluster có thể phục vụ từ hàng trăm đến hàng triệu tenant.
- ✓Phân tầng lưu trữ hot/cold: dữ liệu truy cập thường xuyên nằm trong memory hoặc SSD, dữ liệu ít dùng chuyển sang lưu trữ rẻ hơn để giảm chi phí.
- ✓Bắt buộc xác thực người dùng, mã hóa TLS và kiểm soát truy cập theo vai trò (RBAC).
Ứng dụng thực tế được xây dựng trên Milvus
- •Pipeline Retrieval-Augmented Generation (RAG) cần một kho lưu trữ vector đứng sau LLM để câu trả lời bám vào tài liệu đã truy xuất.
- •Tìm kiếm tương đồng văn bản và hình ảnh, dùng dense embedding để tìm nội dung gần trùng hoặc liên quan về mặt ngữ nghĩa.
- •Hệ thống gợi ý (recommendation) xây dựng dựa trên độ tương đồng embedding giữa người dùng, sản phẩm hoặc nội dung.
- •Sản phẩm tìm kiếm hybrid, kết hợp xếp hạng ngữ nghĩa (vector) với khớp từ khóa BM25 trong cùng một truy vấn.
Bắt đầu với Milvus
Để thử nghiệm cục bộ, chạy `pip install -U pymilvus` để lấy Python SDK, rồi thêm `pip install pymilvus[milvus-lite]` để có Milvus Lite, cho phép `MilvusClient("milvus_demo.db")` chạy một cơ sở dữ liệu vector cục bộ lưu trong một tệp duy nhất — không cần server. Với một triển khai thật, README trỏ tới chế độ Standalone (một máy, có hướng dẫn qua Docker) hoặc cluster phân tán, native trên Kubernetes; bạn cũng có thể bỏ qua việc tự host bằng các gói Serverless, Dedicated hoặc BYOC của Zilliz Cloud. Build từ source đòi hỏi Go >= 1.21, CMake >= 3.26.4 và < 4, GCC >= 11 (Linux) hoặc llvm >= 15 (macOS), và Python > 3.8 và <= 3.11 — sau đó `git clone`, chạy `./scripts/install_deps.sh`, rồi `make`.
Thao tác với Milvus: ví dụ code
Kết nối bằng `from pymilvus import MilvusClient`, sau đó trỏ client tới một tệp cục bộ để dùng Milvus Lite, hoặc tới một server đang chạy hay endpoint Zilliz Cloud bằng `uri` và `token`. Tạo collection với một chiều vector cố định — ví dụ trong README dùng `client.create_collection(collection_name="demo_collection", dimension=768)` cho embedding 768 chiều — rồi nạp dữ liệu bằng `client.insert(collection_name="demo_collection", data=data)`. Truy vấn dùng `client.search(...)` với danh sách vector truy vấn, tham số `limit` để giới hạn số kết quả trả về (topK), và `output_fields` để chọn những trường nào được trả về.
Điểm mạnh
- ✓Nhiều loại index (HNSW, IVF, FLAT, SCANN, DiskANN) nằm trong cùng một engine, nên đổi đánh đổi giữa độ chính xác/tốc độ/bộ nhớ không có nghĩa là phải đổi sang một cơ sở dữ liệu khác.
- ✓Compute và storage scale độc lập với nhau, điều này quan trọng nếu workload của bạn tháng này nặng về đọc, tháng sau lại nặng về ghi.
- ✓Hybrid search (dense + BM25 + sparse embedding) có sẵn từ đầu, không cần gắn thêm một hệ thống tìm kiếm thứ hai bên cạnh.
- ✓Milvus Lite cho bạn một vòng lặp phát triển cục bộ thật sự — `pip install` và một tệp duy nhất — trước khi phải vận hành cluster phân tán.
- ✓Giấy phép Apache 2.0 không giới hạn việc sử dụng thương mại hay phân phối lại.
Những điều cần cân nhắc khi dùng Milvus
- △Triển khai cluster phân tán, native trên Kubernetes là hạ tầng thật sự bạn phải vận hành, không phải một thư viện chỉ cần cài vào — tách node compute/storage, coordinator, và việc scale node truy vấn/dữ liệu đều là việc của bạn.
- △Build từ source đòi hỏi đúng dải phiên bản toolchain (Go, CMake, GCC/llvm, Python cụ thể), gây thêm rắc rối nếu môi trường của bạn chưa khớp sẵn.
- △README khẳng định Milvus được dùng bởi các "doanh nghiệp mission-critical" nhưng không nêu tên công ty cụ thể trong chính tệp đó, nên tuyên bố này không thể tự kiểm chứng chỉ từ repo.
- △Con đường dễ nhất để dùng thử, Zilliz Cloud, là dịch vụ quản lý thương mại của Zilliz (nhà đóng góp chính cho Milvus) đặt trên nền mã nguồn mở, nên "không cần setup" không áp dụng cho hướng tự host.
Các lựa chọn cơ sở dữ liệu vector khác
Các câu hỏi thường gặp về Milvus
Milvus được cấp phép theo Apache 2.0, nên việc sử dụng thương mại, chỉnh sửa và phân phối lại đều được phép mà không phải trả phí bản quyền.
Bản thân Milvus viết bằng Go và C++, còn SDK chính thức là `pymilvus` — phần quickstart và ví dụ code trong README đều dùng Python.
Milvus triển khai theo bốn cách: Milvus Lite (bản cục bộ một tệp cài qua pip), chế độ Standalone cho một máy, cluster phân tán native trên Kubernetes cho production, hoặc Zilliz Cloud quản lý với các gói Serverless, Dedicated và BYOC.
Milvus được thiết kế cho quy mô lớn: kiến trúc phân tán tách compute khỏi storage, hỗ trợ replica để chịu lỗi, và README nói Milvus xử lý được hàng chục nghìn truy vấn tìm kiếm trên hàng tỷ vector.
Milvus hỗ trợ nhiều loại index trong cùng một engine — HNSW, IVF, FLAT (brute-force), SCANN và DiskANN — cùng các biến thể quantization và mmap, cho phép chọn index theo từng collection dựa trên đánh đổi giữa độ chính xác, tốc độ và bộ nhớ.
Milvus hỗ trợ full-text search sẵn bằng thuật toán BM25, đồng thời xử lý được sparse embedding kiểu SPLADE và BGE-M3, có thể kết hợp với dense vector trong cùng một collection để làm hybrid search.
Nên dùng Milvus khi nào — và khi nào nên bỏ qua
Nên chọn Milvus nếu bạn đang xây một tính năng RAG hoặc tìm kiếm cần mở rộng vượt quá khả năng của một cơ sở dữ liệu một node, và team của bạn đã vận hành Kubernetes sẵn — mô hình tách compute/storage và replica của Milvus sinh ra cho đúng thực tế vận hành đó. Nên bỏ qua nếu bạn chỉ có vài trăm nghìn đến vài triệu vector và chưa có kinh nghiệm K8s: Milvus Lite đủ dùng để thử nghiệm cục bộ, nhưng chạy hệ thống phân tán thật làm backend production cho một tập embedding nhỏ nghĩa là bạn gánh thêm việc vận hành cluster mà có lẽ chưa cần đến — pgvector hoặc một dịch vụ quản lý sẽ giải quyết việc đó với ít chi phí vận hành hơn.
Repo liên quan
Chưa chắc milvus có hợp với bạn?
Để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm bên dưới và xem AI nói gì về milvus.
