跳到主要内容

Milvus 是什么?

Milvus 是鹰科鸢属的一种猛禽,以其飞行速度、敏锐的视力和卓越的适应能力而闻名。

Zilliz 采用 Milvus 这个名字来命名其开源的高性能、高度可扩展的向量数据库,该数据库可以在从笔记本电脑到大规模分布式系统的各种环境中高效运行。它既可作为开源软件使用,也可作为云服务使用。

由 Zilliz 开发并很快捐赠给 Linux 基金会旗下的 LF AI & Data 基金会,Milvus 已成为全球领先的开源向量数据库项目之一。它在 Apache 2.0 许可证下分发,大多数贡献者来自高性能计算(HPC)社区,专门从事大规模系统构建和硬件感知代码优化。核心贡献者包括来自 Zilliz、ARM、NVIDIA、AMD、Intel、Meta、IBM、Salesforce、阿里巴巴和微软的专业人士。

有趣的是,Zilliz 的每个开源项目都以鸟类命名,这种命名约定象征着自由、远见和技术的敏捷演进。

非结构化数据、Embeddings 和 Milvus

非结构化数据,如文本、图像和音频,格式多样且包含丰富的底层语义,这使得分析变得具有挑战性。为了管理这种复杂性,我们使用 embeddings 将非结构化数据转换为捕获其基本特征的数值向量。这些向量随后存储在向量数据库中,实现快速且可扩展的搜索和分析。

Milvus 提供强大的数据建模能力,使您能够将非结构化或多模态数据组织成结构化的 Collection。它支持各种数据类型用于不同的属性建模,包括常见的数值和字符类型、各种向量类型、数组、集合和 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 结果)。这种高性能是几个关键设计决策的结果:

硬件感知优化:为了适应各种硬件环境,我们针对多种硬件架构和平台进行了性能优化,包括 AVX512、SIMD、GPU 和 NVMe SSD。

高级搜索算法:Milvus 支持多种内存和磁盘索引/搜索算法,包括 IVF、HNSW、DiskANN 等,所有这些都经过了深度优化。与 FAISS 和 HNSWLib 等流行实现相比,Milvus 提供 30%-70% 更好的性能。

C++ 搜索引擎:向量数据库 80% 以上的性能取决于其搜索引擎。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 组件解耦良好,三个最关键的任务——搜索、数据插入和索引/压缩——被设计为易于并行化的进程,复杂逻辑被分离出来。这确保了相应的 query node、data node 和 index node 可以独立地向上和向外扩展,优化性能和成本效率。

Milvus 支持的搜索类型

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

  • ANN Search:查找与查询向量最接近的前 K 个向量。
  • Filtering Search:在指定的过滤条件下执行 ANN 搜索。
  • Range Search:查找在指定半径内的向量。
  • Hybrid Search:基于多个向量字段进行 ANN 搜索。
  • Full Text Search:基于 BM25 的全文搜索。
  • Reranking:根据额外标准或次要算法调整搜索结果顺序,优化初始 ANN 搜索结果。
  • Fetch:通过主键检索数据。
  • Query:使用特定表达式检索数据。

全面的功能集

除了上述关键搜索功能外,Milvus 还提供了一系列围绕 ANN 搜索实现的功能,让您能够充分利用其能力。

API 和 SDK

高级数据类型

除了基本数据类型外,Milvus 还支持各种高级数据类型及其相应的适用距离度量。

加速

  • 搜索算法 Milvus 支持一组可调优的索引和搜索算法。详情请参见 In-memory IndexOn-disk IndexGPU Index

  • Partition 和 Partition Key Partition 是 Milvus Collection 的细分。您可以选择一个标量字段作为 partition key 以获得更好的搜索性能。详情请参见 Manage PartitionsUse Partition Key

  • 可调一致性模型 一致性确保在给定时间写入或读取数据时,每个 Milvus 节点或副本都具有相同的数据视图。您可以在 Milvus 中进行 ANN 搜索时轻松调整一致性级别。详情请参见 Consistency

  • 高吞吐量数据导入 要将大量数据导入 Milvus,而不是逐个插入,请考虑使用我们的高吞吐量数据导入工具。详情请参阅 Prepare Source DataImport Data

  • 多租户支持 Milvus 实现了许多面向多租户场景的功能,包括 Partition Key、Clustering Key 等。详情请参见 Multi-tenancy Strategies

安全和授权

  • 可调一致性模型 一致性确保在给定时间写入或读取数据时,每个 Milvus 节点或副本都具有相同的数据视图。您可以在 Milvus 中进行 ANN 搜索时轻松调整一致性级别。详情请参见 Consistency

  • 数据隔离和资源控制 对于多租户场景,数据隔离是基本的安全要求。Milvus 实现了多项功能来解决您的安全顾虑。详情请参见 Manage Resource GroupsClustering Compaction

AI 集成

  • Embedding 模型集成 Embedding 模型将非结构化数据转换为其在高维数据空间中的数值表示,以便您可以将其存储在 Milvus 中。目前,Python SDK PyMilvus 集成了多个 embedding 模型,让您可以快速将数据准备成向量 embeddings。详情请参见 Embedding Overview

  • Reranking 模型集成 在信息检索和生成式 AI 领域,reranker 是优化初始搜索结果顺序的重要工具。PyMilvus 还集成了多个 reranking 模型来优化初始搜索返回结果的顺序。详情请参阅 Rerankers Overview

  • LangChain 和其他 AI 工具集成 在 GenAI 时代,像 LangChain 这样的工具获得了应用开发者的广泛关注。作为核心组件,Milvus 通常在这些工具中作为向量存储。要了解如何将 Milvus 集成到您喜欢的 AI 工具中,请参阅我们的 IntegrationsTutorials

工具和生态系统

  • Attu Attu 是一个一体化的直观 GUI,帮助您管理 Milvus 及其存储的数据。详情请参阅 Attu 仓库。

  • Birdwatcher Birdwatcher 是 Milvus 的调试工具。通过连接到 etcd,您可以检查 Milvus 系统的状态或动态配置它。详情请参阅 BirdWatcher

  • Promethus & Grafana 集成 Prometheus 是一个用于 Kubernetes 的开源系统监控和告警工具包。Grafana 是一个开源可视化堆栈,可以连接所有数据源。您可以使用 Promethus & Grafana 作为监控服务提供商来可视化监控 Milvus 分布式系统的性能。详情请参见 Deploying Monitoring Services

  • Milvus Backup Milvus Backup 是一个允许用户备份和恢复 Milvus 数据的工具。它提供 CLI 和 API 以适应不同的应用场景。详情请参阅 Milvus Backup

  • Milvus Capture Data Change (CDC) Milvus-CDC 可以捕获和同步 Milvus 实例中的增量数据,通过无缝传输源实例和目标实例之间的业务数据来确保业务数据的可靠性,实现简单的增量备份和灾难恢复。详情请参阅 Milvus CDC

  • Milvus Connectors Milvus 计划了一系列连接器,让您可以无缝集成 Milvus 与第三方工具,如 Apache Spark。目前,您可以使用我们的 Spark Connector 将 Milvus 数据提供给 Apache Spark 进行机器学习处理。详情请参阅 Spark-Milvus Connector

  • Vector Transmission Services (VTS) Milvus 提供了一套工具,让您可以在 Milvus 实例和多个数据源之间传输数据,包括 Zilliz 集群、Elasticsearch、Postgres(PgVector)和另一个 Milvus 实例。详情请参阅 VTS