Milvus 是一款由 Zilliz 开发的开源向量数据库,专注于高效存储、管理和检索大规模高维向量数据。它被设计用于处理非结构化数据,如图像、文本、音频和视频等,通过将这些数据转换为向量形式,实现高效的相似性搜索和向量检索。
核心特点
- 高性能:Milvus 提供毫秒级的查询响应时间,支持每秒数百次的查询操作,适用于需要快速检索相似数据的应用场景。
- 分布式架构:Milvus 是基于分布式架构设计的,能够水平扩展以应对大规模数据集的需求,同时保证数据的一致性和可用性。
- 多种索引支持:Milvus 支持多种索引类型,如 HNSW、IVF、PQ 等,可以根据具体需求选择最优的索引策略来提高检索效率。
- 多模态搜索:Milvus 支持多模态搜索,可以同时处理多种类型的数据(如图像、文本、音频等),并进行高效的相似性比较。
- 易用性:Milvus 提供了丰富的 API 和工具,支持一键部署和简单易用的操作界面,使得用户可以快速上手并构建大规模向量数据库。
应用场景
Milvus 广泛应用于多个领域,包括但不限于:
- 推荐系统:通过向量相似性搜索,为用户提供个性化推荐。
- 计算机视觉:用于图像检索、目标检测等任务。
- 自然语言处理:支持语义搜索、文本相似性分析等应用。
- 智能客服:通过向量匹配技术,提升问答系统的响应速度和准确性。
技术优势
Milvus 的技术优势主要体现在以下几个方面:
- 云原生分布式特性:支持大规模向量数据的存储和检索,具备高可用性和扩展性。
- GPU 加速:利用 GPU 加速技术,显著提升向量计算和检索的速度。
- 灵活的生态系统:Milvus 拥有活跃的社区和丰富的生态系统,支持与其他大数据和机器学习工具的集成。
发展历程
Milvus 最初由 Zilliz 在 2019 年发布,并迅速成为全球领先的向量数据库之一。目前,Milvus 已经与多家知名企业合作,包括 NVIDIA、IBM 和微软等。此外,Milvus 的 GitHub 星标数量已超过 18,000,显示了其在开发者中的受欢迎程度。
Milvus 是一款功能强大且灵活的向量数据库,适用于各种需要高效相似性搜索和向量管理的应用场景。其高性能、易用性和强大的扩展能力使其成为 AI 和大数据领域的重要工具。
Milvus 向量数据库的最新版本(2.4.0)引入了多项新特性和改进,具体如下:
-
基于 NVIDIA GPU 的 CAGRA 索引:这一新特性显著提升了向量搜索的速度和性能,特别是在处理大规模数据时表现尤为突出。
-
多向量搜索和 Grouping 搜索功能:这些功能增强了 Milvus 在复杂查询场景下的灵活性和实用性,使得用户能够更高效地进行多向量数据的检索和分析。
-
稀疏向量支持:新增了对稀疏向量的支持,进一步扩展了 Milvus 在不同应用场景中的适用性。
-
倒排索引和模糊匹配:这些改进提高了搜索的准确性和灵活性,特别是在处理模糊查询时表现更加出色。
-
内存映射存储:这一特性优化了内存管理,提升了系统的整体性能。
-
元数据过滤中的正则表达式匹配和 Change Data Capture Tool:这些改进增强了数据处理的灵活性和效率。
-
MinIO TLS 连接:增强了数据传输的安全性。
-
标量字段自动索引(AutoIndex) :提高了数据处理的效率。
-
混合搜索重构:通过与一致执行路径相同的搜索过程,提升了搜索性能。
-
bitset 和 bitset_view 加速过滤:优化了数据过滤过程,提升了查询效率。
-
支持等待数据索引完成:增强了导入任务的兼容性。
-
限制导入任务大小和文件数量:提高了导入任务的效率和安全性。
-
QueryCoord 新增目标通道检查点延迟指标:提供了更详细的性能监控指标。
-
改进的类型错误处理:增加了对崩溃、抛出错误的支持,提升了系统的健壮性。
-
停止在二进制向量上进行分组搜索:避免了不必要的性能开销。
-
停止使用混合搜索进行分组搜索:进一步优化了搜索性能。
-
重构分通道通道管理接口和主视图管理接口:提升了系统的可维护性和扩展性。
-
批处理、映射、添加信息标记:增强了系统的灵活性和可配置性。
-
停止使用频繁调用锁以加速操作:减少了锁的竞争,提升了系统性能。
Milvus 在实际应用中的性能表现如何,有哪些成功案例?
Milvus 在实际应用中的性能表现非常出色,并且在多个领域中取得了显著的成功案例。
从性能角度来看,Milvus 是全球最快的向量数据库之一。在最新的 2.2 benchmark 测试中,Milvus 较之前的版本提升了超过 50% 的性能。特别是在处理 1M 向量串行执行的场景下,其延迟低于 3ms,整体 QPS(每秒查询率)甚至超过了 ElasticSearch 的 10 倍。此外,Milvus 支持多种相似性搜索方法,包括二进制和浮点数距离计算,以及 IVF_FLAT 和 hamming 等距离计算方法,这使得它在大规模数据集上表现出色。
在成功案例方面,Milvus 已被多家知名企业成功集成到其应用程序中。例如,Nvidia、Roblox 和 AT&T 等公司都认可了 Milvus 的能力,并将其用于推动业务增长。具体的应用场景包括:
-
图像搜索和推荐系统:Milvus 被广泛应用于图像搜索、自然语言处理和推荐系统等领域。通过优化性能和提供实时响应,Milvus 能够高效处理大规模非结构化数据。
-
广告和营销:Shopee 使用 Milvus 来增强实时搜索能力,特别是在视频召回、版权匹配和视频去重系统中,显著提升了用户体验和内容完整性。Tokopedia 则利用 Milvus 的向量相似性搜索功能来提升产品搜索和排名,从而提高广告服务的智能化和准确性。
-
医疗保健和电子商务:Milvus 在医疗保健和电子商务领域也有广泛应用。例如,Zilliz Cloud 提供基于 Milvus 的全托管向量数据库,具有更高性能、更易扩展和卓越性价比的特点。
-
金融和法律:Milvus 还被用于金融文档检测、制造缺陷检测、专利搜索、房地产租赁、招聘广告、视频推荐、用户画像生成、餐厅推荐、平台定制化搜索等多个行业。
Milvus 支持的索引类型及其各自的优缺点是什么?
根据提供的多条证据,Milvus 支持多种索引类型,每种索引类型都有其特定的优缺点。以下是详细的介绍:
1. FLAT 索引
优点:
- 支持 CPU 和 GPU 建立索引。
- 提供 100% 的检索召回率。
- 搜索速度较快。
缺点:
- 不支持二进制向量的精确搜索和倒排索引。
- 不适用于大规模数据集或需要高精度搜索的场景。
2. IVF_FLAT 索引
优点:
- 基于量化索引,适用于追求查询准确性和查询速度之间平衡的低维数据。
- 通过集群划分和相似性比较实现高效搜索。
缺点:
- 需要更多的内存资源来存储索引。
3. IVF_SQ8 索引
优点:
- 基于量化索引,适用于资源受限场景。
- 减少磁盘、CPU 和显存资源消耗。
缺点:
- 接受一定的召回率降低。
4. IVF_PQ 索引
优点:
- 基于量化索引,适用于追求高查询速度但允许低准确性的场景。
- 使用量化技术减少内存和计算资源消耗。
缺点:
- 查询准确率较低。
5. HNSW 索引
优点:
- 基于图的索引,适用于高维数据集。
- 构建多层导航结构以实现快速搜索。
缺点:
- 索引构建耗时较长。
6. ANNS_PQ 索引
优点:
- 基于量化索引,适用于大规模数据集。
- 使用量化技术减少内存和计算资源消耗。
缺点:
- 查询准确率较低。
7. ANNS_HNSW 索引
优点:
- 基于图的索引,适用于高维数据集。
- 构建多层导航结构以实现快速搜索。
缺点:
- 索引构建耗时较长。
8. ANNS_XNN 索引
优点:
- 使用深度学习模型进行近似最近邻搜索。
- 提供更高的查询速度。
缺点:
- 需要大量的训练数据和计算资源。
总结
Milvus 支持多种索引类型,每种索引类型都有其特定的应用场景和优缺点。选择合适的索引类型需要根据具体的应用需求、数据特性以及硬件资源来决定。例如,FLAT 索引适用于小规模数据集和高召回率需求的场景;IVF_FLAT 和 IVF_SQ8 更适合资源受限的场景;
如何在不同操作系统上部署和配置 Milvus 向量数据库?
在不同操作系统上部署和配置 Milvus 向量数据库的方法如下:
在 Kubernetes 平台上部署 Milvus
-
环境准备:
- 确保已安装运行的 Kubernetes 集群。
- 安装并配置
kubectl
工具。
-
安装 Milvus Operator:
- 在本地测试环境中安装 Minikube。
- 使用
kubectl
安装 Milvus Operator。
-
配置和部署:
- 创建
StorageClass
配置。 - 使用 Milvus Operator 部署 Milvus 集群。
- 配置自定义文件或使用 Milvus Sizing Tool 工具优化资源分配和存储选项。
- 获取服务端口并设置端口转发,以便本地访问 Milvus 集群。
- 创建
在 Linux 系统上部署 Milvus
-
在线安装:
- 使用
yum
命令安装 Milvus 及其依赖包,如libquadmath
,tbb
和tbb-devel
。 - 启动 Milvus 服务。
- 使用
-
离线安装:
- 使用在线安装缓存的依赖文件,通过
rpm
命令安装。 - 启动 Milvus 服务。
- 使用在线安装缓存的依赖文件,通过
-
使用 Docker 安装:
- 安装 Docker 和 Docker Compose。
- 拉取 Milvus 镜像并启动容器。
- 验证安装是否成功。
在 Windows 系统上部署 Milvus
-
环境准备:
- 安装 Docker Desktop 和启用 Windows Subsystem for Linux (WSL)。
- 下载并安装 Ubuntu 18.04 LTS 作为 Linux 发行版。
- 配置 Docker 阿里云加速器以提高下载速度。
-
安装 Milvus:
- 使用 Docker Compose 安装 Milvus Standalone。
- 验证安装是否成功。
部署集群
-
环境准备:
- 安装必要的依赖,如 Docker 和 Kubernetes(如果使用容器编排)。
-
从源代码或预打包二进制包安装:
- 从 GitHub 克隆 Milvus 代码库。
- 使用 Docker 或 Kubernetes 部署。
-
配置集群:
- 根据需求选择单机模式、主从模式或分布式模式(Paxos 或 Raft)。
- 设置节点数量、复制因子等参数。
- 确定数据和索引的存储路径。
-
部署服务:
- 如果使用容器化,创建包含 Milvus 服务的 Docker 容器。
- 如果使用 Kubernetes,编写 YAML 文件描述
Pods
,Service
和Deployment
并应用到集群中。
-
初始化和部署服务:
- 在每个节点上创建 Milvus 实例。
- 初始化集群,统一接口数据,确保数据一致性。
-
监控和扩展:
- 使用 Prometheus 和 Grafana 监控集群性能。
- 根据集群负载动态调整集群规模,如增加或减少节点。
Milvus 与其他向量数据库(如 Annoy、Faiss)的性能和功能对比情况如何?
Milvus、Faiss 和 Annoy 是三种不同的向量数据库,各自具有独特的性能和功能特点。以下是它们的对比情况:
性能对比
-
Faiss:
- GPU 加速:Faiss 支持 GPU 加速,适用于高性能向量搜索场景。
- 多线程支持:Faiss 支持多线程,可以利用 CPU 的并行计算能力。
- 高效性:在大规模数据集上表现优异,特别是在高维数据的相似性搜索中。
-
Milvus:
- 分布式架构:Milvus 支持分布式架构,适合生产环境中的大规模数据处理。
- 多模态支持:Milvus 支持多模态数据,能够处理图像、文本等多种类型的数据。
- 扩展性和定制性:Milvus 提供了丰富的查询功能和扩展性强的接口,支持多种编程语言。
- 实时性:Milvus 提供了实时查询和流批一体的混合搜索功能。
-
Annoy:
- 简单易用:Annoy 使用随机投影树构建高效的索引结构,适合快速搭建向量搜索系统。
- 资源消耗低:Annoy 的内存和计算资源占用较低,适合资源受限的环境。
- 扩展性有限:Annoy 的写操作不高效,扩展性有限。
功能对比
-
Faiss:
- 多种索引类型:Faiss 支持多种索引类型,如 IVFFlat、HNSW 等,可以根据具体需求选择合适的索引策略。
- 社区支持:Faiss 拥有丰富的社区支持和灵活的社区功能。
-
Milvus:
- 丰富的查询功能:Milvus 提供了丰富的查询功能,包括水平扩展和自动化的数据分区管理。
- 图形用户界面(GUI)和可视化工具:Milvus 提供了图形用户界面和可视化工具,方便管理和查询向量数据库。
-
Annoy:
- 简单易用:Annoy 的安装和使用非常简单,适合快速开发和原型设计。
- 持久化存储:Annoy 支持磁盘持久化,适合需要频繁更新数据的应用。
使用场景对比
-
Faiss:
- 高性能需求:适用于需要高性能和高精度的相似性搜索场景,如推荐系统、图像检索等。
-
Milvus:
- 生产环境:适用于生产环境中的大规模数据处理,特别是需要多模态数据支持的场景。
- 实时性需求:适用于需要实时查询和流批一体混合搜索的场景。
-
Annoy:
- 资源受限环境:适用于资源受限的环境,如嵌入式设备或小型服务器。
- 快速原型设计:适用于快速搭建向量搜索系统的原型设计。
总结
- Faiss 更适合需要高性能和高精度的相似性搜索场景,特别是在大规模数据集上表现优异。
- Milvus 提供了强大的分布式架构和多模态支持,适合生产环境中的大规模数据处理和实时查询需求。
- Annoy 则更适合资源受限的环境和快速原型设计,虽然扩展性有限,但在简单易用性和低资源消耗方面有优势。