Milvus 是一款高性能、高可扩展的矢量数据库,可在从笔记本电脑到大型分布式系统的各种环境中高效运行。它既可以作为开源软件使用,也可以作为云服务使用。
Milvus 是 LF AI & Data Foundation 下的一个开源项目,采用 Apache 2.0 许可分发。大多数贡献者都是来自高性能计算 (HPC) 社区的专家,擅长构建大型系统和优化硬件感知代码。核心贡献者包括来自 Zilliz、ARM、NVIDIA、AMD、Intel、Meta、IBM、Salesforce、阿里巴巴和微软的专业人士。
非结构化数据、嵌入和 Milvus
非结构化数据(例如文本、图像和音频)格式各异,并带有丰富的底层语义,因此很难进行分析。为了管理这种复杂性,嵌入用于将非结构化数据转换为数字向量,以捕获其基本特征。然后,这些向量存储在向量数据库中,从而实现快速且可扩展的搜索和分析。
Milvus 提供强大的数据建模功能,使您可以将非结构化或多模式数据组织成结构化集合。它支持用于不同属性建模的多种数据类型,包括常见的数值和字符类型、各种向量类型、数组、集合和 JSON,从而免去了维护多个数据库系统的工作量。
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 支持多种类型的搜索功能,以满足不同用例的需求:
- ANN 搜索:查找最接近您的查询向量的前 K 个向量。
- 过滤搜索:根据指定的过滤条件执行 ANN 搜索。
- 范围搜索:查找距离查询向量指定半径内的向量。
- 混合搜索:根据多个矢量场进行 ANN 搜索。
- 全文搜索:基于BM25的全文搜索。
- 重新排名:根据附加标准或辅助算法调整搜索结果的顺序,从而优化初始 ANN 搜索结果。
- 获取:通过主键检索数据。
- 查询:使用特定表达式检索数据。
全面的功能集
除了上面提到的关键搜索功能外,Milvus 还提供了一组围绕 ANN 搜索实现的功能,以便您可以充分利用其功能。
API 和 SDK
- RESTful API(官方)
- PyMilvus (Python SDK) (官方)
- Go SDK(官方)
- Java SDK(官方)
- Node.js (JavaScript) SDK(官方)
- C#(由微软提供)
高级数据类型
除了原始数据类型之外,Milvus 还支持各种高级数据类型及其各自适用的距离度量。
加速度
分区和分区键 分区是 Milvus 集合的子部分。您可以选择标量字段作为分区键以获得更好的搜索性能。有关详细信息,请参阅管理分区和使用分区键。
可调一致性模型 一致性确保每个 Milvus 节点或副本在给定时间写入或读取数据时具有相同的数据视图。在 Milvus 中进行 ANN 搜索时,您可以轻松调整一致性级别。有关详细信息,请参阅一致性。
高吞吐量数据导入 如果您需要将大量数据导入 Milvus,而不是逐个插入,可以考虑使用我们的高吞吐量数据导入工具。详情请参阅准备源数据和导入数据。
多租户支持 Milvus 实现了很多面向多租户场景的功能,包括 Partition Key、Clustering Key 等等,详细内容请参见多租户策略。
安全和授权
可调一致性模型 一致性确保每个 Milvus 节点或副本在给定时间写入或读取数据时具有相同的数据视图。在 Milvus 中进行 ANN 搜索时,您可以轻松调整一致性级别。有关详细信息,请参阅一致性。
数据隔离与资源管控 对于多租户场景,数据隔离是基本的安全需求。Milvus 实现了多种功能来解决您的安全问题。详情请参阅管理资源组和集群压缩。
人工智能集成
嵌入模型集成 嵌入模型将非结构化数据转换为高维数据空间中的数值表示,以便您可以将它们存储在 Milvus 中。目前,Python SDK PyMilvus 集成了多个嵌入模型,以便您可以快速将数据准备成向量嵌入。有关详细信息,请参阅嵌入概述。
重排序模型集成 在信息检索和生成式 AI 领域,重排序器是优化初始搜索结果顺序的重要工具。PyMilvus 还集成了多个重排序模型,以优化初始搜索返回的结果顺序。有关详细信息,请参阅重排序器概述。
LangChain 与其他 AI 工具集成 在 GenAI 时代,诸如 LangChain 之类的工具受到应用开发者的广泛关注。Milvus 作为核心组件,通常用作此类工具中的向量存储。要了解如何将 Milvus 集成到您最喜欢的 AI 工具中,请参阅我们的集成和教程。
工具和生态系统
Attu Attu 是一个一体化的直观 GUI,可帮助您管理 Milvus 及其存储的数据。有关详细信息,请参阅Attu存储库。
Birdwatcher Birdwatcher 是 Milvus 的调试工具。使用它连接到 etcd,您可以检查 Milvus 系统的状态或对其进行动态配置。有关详细信息,请参阅BirdWatcher。
Promethus & Grafana 集成 Prometheus 是 Kubernetes 开源的系统监控和告警工具包,Grafana 是一个开源的可视化栈,可以对接所有数据源。您可以使用 Promethus & Grafana 作为监控服务提供者,对 Milvus 分布式性能进行可视化监控。详情请参见部署监控服务。
Milvus Backup Milvus Backup 是一款帮助用户备份和恢复 Milvus 数据的工具。它同时提供 CLI 和 API 以适应不同的应用场景。有关详细信息,请参阅Milvus Backup。
Milvus 捕获数据变化 (CDC) Milvus-CDC 可以捕获并同步 Milvus 实例中的增量数据,并通过在源实例和目标实例之间无缝传输业务数据来确保业务数据的可靠性,从而轻松实现增量备份和灾难恢复。有关详细信息,请参阅Milvus CDC。
Milvus 连接器 Milvus 为您规划了一套连接器,以便将 Milvus 与第三方工具(例如 Apache Spark)无缝集成。目前,您可以使用我们的 Spark 连接器将您的 Milvus 数据提供给 Apache Spark 进行机器学习处理。有关详细信息,请参阅Spark-Milvus 连接器。
向量传输服务 (VTS) Milvus 提供了一套工具,可帮助您在 Milvus 实例和一系列数据源(包括 Zilliz 集群、Elasticsearch、Postgres (PgVector) 和另一个 Milvus 实例)之间传输数据。有关详细信息,请参阅VTS。