什么是 Milvus?

Milvus 是鹰科 Accipaitridae 中 Milvus 属的一种猛禽,以飞行速度快、视力敏锐、适应性强而著称。

Zilliz 采用 Milvus 作为其开源高性能、高扩展性向量数据库的名称,该数据库可在从笔记本电脑到大规模分布式系统等各种环境中高效运行。它既是开源软件,也是云服务。Milvus 由 Zilliz 开发,并很快捐赠给了 Linux 基金会下的 LF AI & Data 基金会,现已成为世界领先的开源向量数据库项目之一。它采用 Apache 2.0 许可发布,大多数贡献者都是高性能计算(HPC)领域的专家,擅长构建大规模系统和优化硬件感知代码。核心贡献者包括来自 Zilliz、ARM、英伟达、AMD、英特尔、Meta、IBM、Salesforce、阿里巴巴和微软的专业人士。

有趣的是,Zilliz 的每个开源项目都以鸟命名,这种命名方式象征着自由、远见和技术的敏捷发展。

非结构化数据、Embeddings 和 Milvus

非结构化数据(如文本、图像和音频)格式各异,蕴含丰富的潜在语义,因此分析起来极具挑战性。为了处理这种复杂性,Embeddings 被用来将非结构化数据转换成能够捕捉其基本特征的数字向量。然后将这些向量存储在向量数据库中,从而实现快速、可扩展的搜索和分析。

Milvus 提供强大的数据建模功能,使您能够将非结构化或多模式数据组织成结构化的 Collections。它支持多种数据类型,适用于不同的属性模型,包括常见的数字和字符类型、各种向量类型、数组、集合和 JSON,为您节省了维护多个数据库系统的精力。

非结构化数据、Embeddings 和 Milvus

Milvus 提供三种部署模式,涵盖各种数据规模——从 Jupyter Notebooks 中的本地原型到管理数百亿向量的大规模 Kubernetes 集群:

  • Milvus Lite 是一个 Python 库,可以轻松集成到您的应用程序中。作为 Milvus 的轻量级版本,它非常适合在 Jupyter Notebooks 中进行快速原型开发,或在资源有限的边缘设备上运行。了解更多信息
  • Milvus Standalone 是单机服务器部署,所有组件都捆绑在一个 Docker 镜像中,方便部署。了解更多
  • Milvus Distributed 可部署在 Kubernetes 集群上,采用云原生架构,专为十亿规模甚至更大的场景而设计。该架构可确保关键组件的冗余。了解更多

Milvus 为何如此快速?

Milvus 从设计之初就是一个高效的向量数据库系统。在大多数情况下,Milvus 的性能是其他向量数据库的 2–5 倍(参见 VectorDBBench 结果)。这种高性能是几个关键设计决策的结果:

  • 硬件感知优化:为了让 Milvus 适应各种硬件环境,我们专门针对多种硬件架构和平台优化了其性能,包括 AVX512、SIMD、GPU 和 NVMe SSD。
  • 高级搜索算法:Milvus 支持多种内存和磁盘索引/搜索算法,包括 IVF、HNSW、DiskANN 等,所有这些算法都经过了深度优化。与 FAISS 和 HNSWLib 等流行实现相比,Milvus 的性能提高了 30%–70%。
  • C++ 搜索引擎:向量数据库性能的 80% 以上取决于其搜索引擎。由于 C++ 语言的高性能、底层优化和高效资源管理,Milvus 使用 C++ 来处理这一关键组件。最重要的是,Milvus 集成了大量硬件感知代码优化,从汇编级向量到多线程并行化和调度,以充分利用硬件能力。
  • 面向列:Milvus 是面向列的向量数据库系统。其主要优势来自数据访问模式。在执行查询时,面向列的数据库只读取查询中涉及的特定字段,而不是整行,这大大减少了访问的数据量。此外,对基于列的数据的操作可以很容易地进行向量化,从而可以一次性在整个列中应用操作,进一步提高性能。

是什么让 Milvus 具有如此高的可扩展性?

2022 年,Milvus 支持十亿级向量,2023 年,它以持续稳定的方式扩展到数百亿级,为 300 多家大型企业的大规模场景提供支持,包括 Salesforce、PayPal、Shopee、Airbnb、eBay、NVIDIA、IBM、AT&T、LINE、ROBLOX、Inflection 等。

Milvus 的云原生和高度解耦的系统架构确保了系统可以随着数据的增长而不断扩展:

Milvus 高度解耦的系统架构

Milvus 本身是完全无状态的,因此可以借助 Kubernetes 或公共云轻松扩展。此外,Milvus 的各个组件都有很好的解耦,其中最关键的三项任务——搜索、数据插入和索引/压实——被设计为易于并行化的流程,复杂的逻辑被分离出来。这确保了相应的查询节点、数据节点和索引节点可以独立地向上和向下扩展,从而优化了性能和成本效率。

Milvus 支持的搜索类型

Milvus 支持各种类型的搜索功能,以满足不同用例的需求:

  • ANN 搜索:查找最接近查询向量的前 K 个向量。
  • 过滤搜索:在指定的过滤条件下执行 ANN 搜索。
  • 范围搜索:查找查询向量指定半径范围内的向量。
  • 混合搜索:基于多个向量场进行 ANN 搜索。
  • 全文搜索:基于 BM25 的全文搜索。
  • Rerankers:根据附加标准或辅助算法调整搜索结果顺序,完善初始 ANN 搜索结果。
  • 获取:根据主键检索数据。
  • 查询:使用特定表达式检索数据。

综合功能集

应用程序接口和 SDK

  • RESTful API(官方)
  • PyMilvus(Python SDK)(官方)
  • Go SDK(官方)
  • Java SDK(官方)
  • Node.js(JavaScript)SDK(官方)
  • C#(微软提供)
  • C++ SDK(开发中)
  • Rust SDK(开发中)

高级数据类型

除了原始数据类型,Milvus 还支持各种高级数据类型及其各自适用的距离度量:

  • 稀疏向量
  • 二进制向量
  • JSON 支持
  • 数组支持
  • 文本(开发中)
  • 地理定位(开发中)

为什么选择 Milvus?

高性能和高可用性

Milvus 采用 计算与存储分离的分布式架构。Milvus 可以横向扩展并适应多样化的流量模式,通过独立增加读取繁重工作负载的查询节点和写入繁重工作负载的数据节点来实现最佳性能。Kubernetes 上的无状态微服务允许从故障中快速恢复,确保了高可用性。通过在多个查询节点上加载数据段,对复制的支持进一步增强了容错能力和吞吐量。

支持各种向量索引类型和硬件加速

Milvus 分离了系统和核心向量搜索引擎,使其能够支持针对不同场景优化的所有主要向量索引类型,包括 HNSW、IVF、FLAT(暴力)、SCANN 和 DiskANN,以及基于量化的变化和 mmap。Milvus 针对元数据过滤和范围搜索等高级功能对向量搜索进行了优化,并支持 GPU 索引,如英伟达的 CAGRA。

灵活的多租户和热/冷存储

Milvus 通过在数据库、Collection、分区或分区 Key 层面进行隔离来支持多租户。灵活的策略允许单个集群处理数百到数百万个租户,还能确保优化的搜索性能和灵活的访问控制。Milvus 通过冷/热存储提高了成本效益。经常访问的热数据可以存储在内存或固态硬盘中以获得更好的性能,而访问量较少的冷数据则保存在速度较慢、成本效益较高的存储设备中,从而大大降低成本,同时保持关键任务的高性能。

用于全文搜索和混合搜索的稀疏向量

除了通过密集向量进行语义搜索外,Milvus 还通过 BM25 以及 SPLADE 和 BGE-M3 等学习型稀疏嵌入原生支持全文搜索。用户可以将稀疏向量和密集向量存储在同一个 Collections 中,并定义函数对多个搜索请求的结果进行 Rerank。

数据安全和细粒度访问控制

Milvus 通过实施强制用户认证、TLS 加密和基于角色的访问控制(RBAC)来确保数据安全。用户身份验证确保只有拥有有效凭证的授权用户才能访问数据库,而 TLS 加密则确保网络通信的安全。RBAC 允许根据用户的角色为其分配特定权限,实现细粒度访问控制。

人工智能集成

  • Embeddings 模型集成:通过 PyMilvus 集成多个嵌入模型,将非结构化数据转换成向量表示。
  • Reranker 模型集成:集成多种 Reranker 模型以优化搜索结果排序。
  • 与 LangChain 及其他 AI 工具集成:Milvus 可作为向量存储与流行的 AI 工具和框架结合使用。

工具和生态系统

  • Attu:一体化图形界面,帮助管理 Milvus 数据库。
  • Birdwatcher:用于调试 Milvus 系统状态。
  • Prometheus & Grafana:用于监控 Milvus Distributed 性能。
  • Milvus 备份:备份与恢复 Milvus 数据的工具。
  • Milvus Capture Data Change (CDC):捕获和同步 Milvus 实例中的增量数据。
  • Milvus 连接器:用于与第三方系统(如 Apache Spark)集成。
  • 向量传输服务(VTS):在 Milvus 与其他数据源间传输数据的工具。

参考资料

https://milvus.io/docs/zh/overview.md