什么是 Milvus?
不到 10 分钟带你了解 Milvus 的一切。
什么是向量嵌入(Vector Embeddings)?
向量嵌入(Vector Embeddings)是来源于机器学习模型的数值表示,用于封装非结构化数据的语义含义。这些嵌入是通过神经网络或 Transformer 架构分析数据中的复杂关联生成的,创建了一个稠密向量空间,其中每个点对应于数据对象(例如文档中的单词)的“含义”。
这个过程将文本或其他非结构化数据转换为反映语义相似性的向量——含义相关的单词在这个多维空间中位置更接近,从而促进了一种被称为“稠密向量搜索”(dense vector search)的搜索方式。这与依赖精确匹配并使用稀疏向量的传统关键词搜索形成对比。向量嵌入的发展,通常源于大型科技公司广泛训练的基础模型,使得更细致的搜索成为可能,能够捕捉数据本质,超越词汇或稀疏向量搜索方法的局局限性。

向量嵌入有哪些用途?
向量嵌入可应用于各种场景,以多种方式提高效率和准确性。以下是一些最常见的应用场景:
查找相似的图像、视频或音频文件
向量嵌入使得通过内容而非关键词来搜索相似的多媒体内容成为可能,它使用卷积神经网络(CNN)分析图像、视频帧或音频片段。通过比较存储在向量数据库中的嵌入表示,这可以实现高级搜索,例如根据声音提示查找图像或通过图像查询查找视频。
加速药物发现
在制药行业,向量嵌入可以编码化合物的化学结构,通过衡量其与目标蛋白质的相似性来帮助识别有潜力的药物候选物。这加速了药物发现过程,通过专注于最有希望的先导化合物来节省时间和资源。
通过语义搜索提高搜索相关性
通过将内部文档嵌入到向量中,组织可以利用语义搜索来提高搜索结果的相关性。这种方法使用检索增强生成(RAG)的概念来理解查询背后的意图,通过像 ChatGPT 这样的 AI 模型从公司数据中提供答案,从而减少不相关的结果和 AI 幻觉。
推荐系统
向量嵌入通过将用户和物品表示为嵌入来衡量相似性,从而彻底改变了推荐系统。这种方法能够根据个人偏好提供个性化推荐,提高用户满意度及在线平台的参与度。
异常检测
在欺诈检测、网络安全和工业监控等领域,向量嵌入在识别异常模式方面发挥着重要作用。表示为嵌入的数据点允许通过计算距离或相异度来检测异常,有助于及早识别并采取预防措施应对潜在问题。
什么是向量数据库?
向量数据库是专门设计用于通过向量嵌入和数值表示来管理和检索非结构化数据的系统,这些表示捕捉了图像、音频、视频和文本内容等数据项的本质。与处理结构化数据并进行精确搜索操作的传统关系型数据库不同,向量数据库擅长使用近似最近邻(ANN)算法等技术进行语义相似性搜索。这种能力对于开发推荐系统、聊天机器人和多媒体内容搜索工具等各个领域的应用至关重要,并且有助于解决 AI 和大型语言模型(如 ChatGPT)带来的挑战,例如理解上下文、细微差别以及 AI 幻觉。
Milvus 等向量数据库的出现正在通过实现对大量非结构化数据的基于内容的搜索来改变行业,超越了人工生成标签的限制。向量数据库的关键特性包括:
可扩展性和可调性,以处理不断增长的数据量
多租户和数据隔离,以实现高效的资源利用和隐私保护
适用于多种编程语言的完整 API 套件
简化与复杂数据交互的友好界面
这些特性确保了向量数据库能够满足现代应用的需求,提供了传统数据库无法实现的强大工具来探索和利用非结构化数据。
向量数据库对比向量搜索库
FAISS、ScaNN 和 HNSW 等向量搜索库为构建能够执行高效相似性搜索和稠密向量聚类的原型系统提供了基础工具。这些库虽然功能强大且开源,但主要设计用于向量检索,并提供快速设置,具备处理大型向量集合以及提供评估和参数调整接口的能力。然而,它们在可扩展性、多租户和动态数据修改方面有所欠缺,因此不太适合处理更大、更复杂的数据集和不断增长的用户群。
相比之下,向量数据库是更全面的解决方案,旨在容纳数百万到数十亿向量的存储和实时检索。它们提供了更高层次的抽象、可扩展性、云原生特性以及超越向量搜索库基本功能的友好特性。虽然像 FAISS 这样的库是向量数据库可能基于的重要组件,但向量数据库是功能齐全的服务,简化了数据插入和管理等操作,使其更符合非结构化数据处理领域中大规模、动态应用的需求。
向量数据库对比传统数据库的向量搜索插件
向量数据库和传统数据库的向量搜索插件在处理基于向量的搜索方面扮演着不同的角色。像 Elasticsearch 8.0 中的插件在现有数据库架构内提供向量搜索功能,它们是增强功能而非全面的解决方案。这些插件缺乏对嵌入管理和向量搜索的全栈方法,导致对非结构化数据应用的限制和次优性能。
对于高效的向量数据库操作至关重要的可调性和友好 API/SDK 等关键特性在向量搜索插件中明显缺失。例如,Elasticsearch 的 ANN 引擎虽然支持基本的向量存储和查询,但受其索引算法和距离度量选项的限制,与 Milvus 这样的专用向量数据库相比,灵活性较差。Milvus 从头开始设计为向量数据库,提供了更直观的 API、对索引方法和距离度量的更广泛支持,以及类似 SQL 查询的可能性,这突显了其在管理和查询非结构化数据方面的优越性。这种根本区别强调了为什么在实现向量嵌入的最佳搜索和管理方面,具有全面功能集和为非结构化数据量身定制的架构的向量数据库优于向量搜索插件。
Milvus 与其他向量数据库有何不同?
Milvus 作为向量数据库脱颖而出,其可扩展架构和多样化功能旨在加速和统一各种应用的搜索体验。主要特性亮点包括:
可扩展且弹性架构
Milvus 的设计旨在实现卓越的可扩展性和弹性,以适应现代应用的动态需求。它通过面向服务的设计实现这一点,解耦了存储、协调器和工作节点,允许按组件进行扩展。这种模块化方法确保不同的计算任务可以根据不同的工作负载独立扩展,提供细粒度的资源分配和隔离。
多样化索引支持
Milvus 支持广泛的索引类型,超过 10 种,包括 HNSW、IVF、Product Quantization 和基于 GPU 的索引等广泛使用的类型。这种多样性使开发人员能够根据特定的性能和准确性要求优化搜索,确保数据库能够适应各种应用和数据特征。持续扩展其索引种类(例如 GPU 索引)进一步增强了 Milvus 在处理复杂搜索任务时的适应性和有效性。
多功能搜索能力
Milvus 提供多种搜索类型,包括 top-K 近似最近邻(ANN)、范围 ANN 和带有元数据过滤的搜索,以及即将推出的混合稠密和稀疏向量搜索。这种多样性实现了无与伦比的查询灵活性和精度,使开发人员能够定制数据检索策略以满足特定的应用需求,从而优化搜索结果的相关性和效率。
可调一致性
Milvus 提供了一种增量一致性模型,允许用户为查询数据指定“陈旧性容忍度”,从而在查询性能和数据新鲜度之间实现量身定制的平衡。这种灵活性对于需要在不牺牲响应时间的情况下获取最新结果的应用至关重要,可根据应用需求有效支持强一致性和最终一致性。
硬件加速计算支持
Milvus 旨在利用各种计算能力,例如用于 SIMD 执行的 AVX512 和 Neon,以及量化、缓存感知优化和 GPU 支持。这种方法可以有效利用特定的硬件优势,确保快速处理和经济高效的扩展。通过根据不同应用的独特需求调整资源使用,Milvus 提高了向量数据管理和搜索操作的速度和效率。
Milvus 工作原理概述
Milvus 的结构基于多层架构,旨在高效处理向量数据,确保可扩展性、可调性和数据隔离。以下是其架构的简化概述:
访问层
这一层是外部请求的初始接触点,利用无状态代理进行客户端连接管理、静态验证和动态检查。这些代理还负责负载均衡,并且是实现 Milvus 完整 API 套件的关键。一旦下游服务处理完请求,访问层会将响应路由回用户。
协调服务
作为中央指挥,该服务通过四个协调器协调负载均衡和数据管理,确保高效的数据、查询和索引管理。
Root Coordinator(根协调器): 管理数据相关任务和全局时间戳
Query Coordinator(查询协调器): 监督用于搜索操作的查询节点
Data Coordinator(数据协调器): 处理数据节点和元数据
Index Coordinator(索引协调器): 维护索引节点和元数据
工作节点
工作节点负责任务的实际执行,它们是可扩展的 Pod,执行来自协调器的命令。它们使 Milvus 能够根据不断变化的数据、查询和索引需求动态调整,支持系统的可扩展性和可调性。
对象存储层
作为数据持久化的基础,这一层包括:
元数据存储: 使用 etcd 进行元数据快照和系统健康检查
日志代理: 用于流式数据持久化和恢复,利用 Pulsar 或 RocksDB
对象存储: 存储日志快照、索引文件和查询结果,支持 AWS S3、Azure Blob Storage 和 MinIO 等服务

接下来做什么?
加入本地的 Unstructured Data 线下聚会和我们的 Discord。