开源向量数据库Milvus简介
Milvus 是一个开源的、高性能、高扩展性的向量数据库,专门用于处理和检索高维向量数据。它适用于相似性搜索(Approximate Nearest Neighbor Search,ANN),特别适合**AI、推荐系统、计算机视觉、自然语言处理(NLP)**等领域。Milvus 由 Zilliz 开发,并已捐赠给 LF AI & Data 基金会。
向量是神经网络模型的输出数据格式,可以有效地对信息进行编码,在知识库、语义搜索、检索增强生成(RAG)等人工智能应用中发挥着举足轻重的作用。
1. 非结构化数据、Embeddings 和 Milvus
文本、图像和音频等非结构化数据格式各异,并带有丰富的底层语义,因此分析起来极具挑战性。为了处理这种复杂性,Embeddings 被用来将非结构化数据转换成能够捕捉其基本特征的数字向量。然后将这些向量存储在向量数据库中,从而实现快速、可扩展的搜索和分析。
Milvus 提供强大的数据建模功能,使您能够将非结构化或多模式数据组织成结构化的 Collections。它支持多种数据类型,适用于不同的属性模型,包括常见的数字和字符类型、各种向量类型、数组、集合和 JSON。
Milvus 提供三种部署模式,涵盖各种数据规模:
- Milvus Lite 是一个 Python 库,可以轻松集成到您的应用程序中。作为 Milvus 的轻量级版本,它非常适合在 Jupyter Notebooks 中进行快速原型开发,或在资源有限的边缘设备上运行。
- Milvus Standalone 是单机服务器部署,所有组件都捆绑在一个 Docker 镜像中,方便部署。
- Milvus Distributed 可部署在 Kubernetes 集群上,采用云原生架构,专为十亿规模甚至更大的场景而设计。该架构可确保关键组件的冗余。
2. Milvus架构
Milvus 主要由以下组件组成:
- Coordinator(协调器):管理元数据、查询和数据分片。
- Proxy(代理):处理 API 请求并转发给计算节点。
- QueryNode(查询节点):执行 ANN 查询,返回最近邻数据。
- DataNode(数据节点):存储和管理向量数据。
- IndexNode(索引节点):构建和存储索引以加速查询。
- MetaStore(元数据存储):使用 etcd 存储元数据。
- Storage(存储层):使用 MinIO/S3 存储向量数据和索引。
Milvus 的云原生和高度解耦的系统架构确保了系统可以随着数据的增长而不断扩展:
Milvus 本身是完全无状态的,因此可以借助 Kubernetes 或公共云轻松扩展。此外,Milvus 的各个组件都有很好的解耦,其中最关键的三项任务–搜索、数据插入和索引/压实–被设计为易于并行化的流程,复杂的逻辑被分离出来。这确保了相应的查询节点、数据节点和索引节点可以独立地向上和向下扩展,从而优化了性能和成本效率。
3. Milvus 支持的搜索类型
Milvus 支持各种类型的搜索功能,以满足不同用例的需求:
- ANN 搜索:查找最接近查询向量的前 K 个向量。
- 过滤搜索:在指定的过滤条件下执行 ANN 搜索。
- 范围搜索:查找查询向量指定半径范围内的向量。
- 混合搜索:基于多个向量场进行 ANN 搜索。
- 全文搜索:基于 BM25 的全文搜索。
- Rerankers:根据附加标准或辅助算法调整搜索结果顺序,完善初始 ANN 搜索结果。
- 获取:根据主键检索数据。
- 查询: 使用特定表达式检索数据。
4. 相关资料
- Milvus 是什么?: https://milvus.io/docs/zh/overview.md
Milvus 是什么?: https://milvus.io/docs/zh/overview.md