向僵尸开炮苹果版
1.4G · 2025-10-14
向量数据库已成为存储和索引非结构化与结构化数据表征的首选工具。这些表征被称为向量嵌入(vector embeddings),由嵌入模型生成。向量存储在使用深度学习模型(尤其是大语言模型)开发应用时发挥着关键作用。
在现实世界中,并非所有数据都能整齐地归入行列之中。处理图像、视频和自然语言等复杂非结构化数据时尤其如此。于是,向量数据库应运而生。
向量数据库是一种将数据存储为高维向量的数据库,这些向量本质上是代表对象特征或特性的数字列表。每个向量对应一个唯一实体,如一段文本、一张图像或一段视频。
但为什么要使用向量呢?其神奇之处在于它们能够捕捉语义含义和相似性。通过将数据表示为向量,我们可以用数学方法对它们进行比较,并确定它们之间的相似或相异程度。这使我们能够执行诸如“找到与这张图像相似的图像”或“检索与这段文本语义相关的文档”等复杂查询。
近年来,向量数据库变得越来越受欢迎,尤其是在机器学习(ML)和人工智能(AI)领域。AI 和 ML 模型的复杂性使得人们需要有效的方法来存储、搜索和检索它们所处理的大量非结构化数据。
传统数据库专为结构化数据而设计,其复杂性和规模往往难以应对向量数据。相反,向量数据库正是为此目的而构建的。它们提供专门的搜索和索引算法,即使在包含数十亿条目的数据库中也能快速找到相似向量。
寻找相似向量的能力极大地扩展了 AI 和 ML 应用的范围。典型用例包括:
RAG 系统:向量数据库可与大语言模型(LLM)结合使用,构建基于知识驱动的语言 AI 应用。
推荐系统:向量数据库通过将用户偏好和物品属性表示为向量,能够为高度个性化的推荐引擎提供支持。
基于内容的检索:向量数据库通过支持视觉相似图像或视频的搜索,彻底改变了基于内容的检索方式。
自然语言处理:通过将文本转换为向量,向量数据库可提供语义搜索、主题建模和文档分组功能。
欺诈检测:向量数据库可用于帮助识别金融交易中的趋势和异常现象。
目前存在多种向量数据库——如 Qdrant、Pinecone、Milvus、Chroma、Weaviate 等。每种数据库都有其优势、权衡以及最适用的场景。在此,我们将对包括 Pinecone、Milvus、Chroma、Weaviate、Faiss、Elasticsearch 和 Qdrant 在内的流行向量数据库进行全面比较。
在这方面,Pinecone 是个例外。由于 Pinecone 是一个为性能和可扩展性而设计的全托管服务,因此您无法在本地运行实例。Milvus、Chroma、Weaviate、Faiss、Elasticsearch 和 Qdrant 都可以在本地运行;大多数都提供了用于本地部署的 Docker 镜像。
Qdrant 提供静态分片;如果您的数据增长超出了服务器的容量,您需要向集群添加更多机器并重新对所有数据进行分片。这可能是一个耗时且复杂的过程。此外,分片不均衡可能会引入瓶颈并降低系统效率。
Pinecone 在其无服务器(Serverless)层级中支持计算与存储的分离。对于其基于 POD 的集群,Pinecone 采用静态分片,这要求用户在扩展集群时手动重新分片数据。
Weaviate 提供静态分片。Chroma 无法扩展到单节点之外,且不具备任何分布式数据替换功能。
Qdrant 在几乎所有场景中都实现了最高的每秒请求数(RPS)和最低的延迟,无论精度阈值和我们选择的指标如何。在某个数据集上,它还显示出了 4 倍的 RPS 提升。
Elasticsearch 在许多用例中变得相当快,但在索引时间方面非常慢。在存储 1000 万个 96 维向量时,它可能会慢 10 倍!(32 分钟 vs 5.5 小时)
Milvus 在索引时间方面是最快的,并能保持良好的精度。然而,当您拥有更高维度的嵌入或更多数量的向量时,它在 RPS 或延迟方面无法与其他数据库相媲美。
Redis 能够在较低精度下实现良好的 RPS。它在单线程下也能实现低延迟;然而,随着并行请求的增多,其延迟会迅速上升。这部分速度提升得益于其自定义协议。
Weaviate 随着时间的推移改进最小。由于其他引擎的相对改进,它已成为 RPS 和延迟方面最慢的数据库之一。
向量数据库之所以如此有用,其中一个原因是它们能够告诉我们事物之间的关系以及它们之间的相似或相异程度。向量数据库可以使用多种距离指标来实现这一点,不同的向量数据库会实现不同的距离指标。
虽然 REST API 更为常见,但 gRPC API 专为延迟敏感场景或需要快速传输大量数据的场景而设计,侧重于性能和吞吐量。根据您的需求和网络情况,gRPC 的速度可能比 REST 快数倍。
开源意味着我们可以浏览核心数据库的源代码,并且向量数据库具有灵活的许可模式。
元数据是一个与核心向量数据库功能互补的强大概念;它是模糊人类语言与结构化数据之间的桥梁。这是架构的基础,在该架构中,人类用户请求某个产品,AI 购物助手会立即响应他们所描述的商品。
Qdrant:Qdrant 使用三种类型的索引为其数据库提供支持。这三种索引分别是:有效载荷索引(类似传统面向文档数据库中的索引)、字符串有效载荷的全文索引以及向量索引。它们的混合搜索方法是向量搜索与属性过滤的结合。
Pinecone:RBAC(基于角色的访问控制)对于大型组织来说还不够。存储优化型(S1)存在一些性能挑战,只能达到 10–50 QPS。命名空间的数量有限,用户应谨慎使用元数据过滤作为解决此限制的方法,因为这会对性能产生很大影响。此外,此方法无法提供数据隔离。
Weaviate:Weaviate 使用两种类型的索引为其数据库提供支持。倒排索引将数据对象属性映射到其在数据库中的位置,以及用于支持高性能查询的向量索引。此外,其混合搜索方法使用密集向量来理解查询的上下文,并将其与用于关键字匹配的稀疏向量相结合。
Chroma:Chroma 使用 HNSW 算法来支持 k 近邻(kNN)搜索。
Milvus:Milvus 支持多种内存索引和表级分区,从而为实时信息检索系统所需的高性能提供了保障。RBAC 支持是企业级应用的必要条件。关于分区,通过将搜索限制在数据库的一个或几个子集,分区可以比静态分片提供更有效的数据过滤方式,而静态分片可能会引入瓶颈,并需要在数据增长超出服务器容量时重新分片。分区是管理数据的绝佳方式,可以按类别或时间范围将数据分组到子集中。这可以帮助您轻松过滤和搜索大量数据,而无需每次都搜索整个数据库。没有一种索引类型能够适合所有用例,因为每种用例都会有不同的权衡。支持的索引类型越多,您就越能灵活地在准确性、性能和成本之间找到平衡。
Faiss:FAISS 是一种支持 k 近邻(kNN)搜索的算法。
Qdrant 提供了一种由 Rust 构建的生产级服务,Rust 是一种以安全性著称的语言。Qdrant 配备了用户友好的 API,旨在存储、搜索和管理富含元数据(称为有效载荷)的高维点(Points,即向量嵌入)。这些有效载荷成为有价值的信息,可提高搜索精度并为用户提供有洞察力的数据。如果您熟悉其他向量数据库(如 Chroma),有效载荷类似于元数据;它包含有关向量的信息。
由于使用 Rust 编写,Qdrant 即使在高负载下也是一种快速且可靠的向量存储。Qdrant 与其他数据库的区别在于它提供的客户端 API 数量。目前,Qdrant 支持 Python、TypeScript/JavaScript、Rust 和 Go。它使用 HSNW(分层可导航小世界图)进行向量索引,并提供多种距离指标,如余弦(Cosine)、点积(Dot)和欧几里得(Euclidean)。它开箱即用地提供了推荐 API。
考虑 Qdrant 时的一些关键要点包括:
Qdrant 采用 Rust 构建,确保了速度和可靠性,即使在高负载下也是如此,使其成为高性能向量存储的最佳选择。
Qdrant 的独特之处在于其支持客户端 API,为 Python、TypeScript/JavaScript、Rust 和 Go 开发者提供了便利。
Qdrant 利用 HSNW 算法并提供不同的距离指标,包括点积、余弦和欧几里得,使开发者能够选择与其特定用例相匹配的指标。
Qdrant 通过可扩展的云服务无缝过渡到云端,为探索提供免费层级选项。其云原生架构确保无论数据量如何,都能提供最佳性能。
高效的相似性搜索——Qdrant 专为相似性搜索操作而设计。在大量数据中查找相似嵌入时,它非常快速且准确。
可扩展性——Qdrant 具有可扩展性,因为它能够高效处理大量向量。
易用性——Qdrant 数据库提供了用户友好的 API,使其易于设置、插入数据和执行相似性搜索。
开源——Qdrant 是一个开源项目,这意味着我们可以访问源代码并为其开发做出贡献。
灵活性——Qdrant 数据库支持灵活的模式,这意味着我们可以定义不同类型的向量字段,还可以存储和搜索不同类型的数据,如图像、文本、音频等。
Qdrant 是一个强大的工具,可以帮助企业释放语义嵌入的力量,并彻底改变文本搜索。它为管理高维数据提供了可靠且可扩展的解决方案,具有出色的查询性能和易于集成的特点。其开源数据库允许持续开发、修复错误并进行改进。Qdrant 提供了灵活的部署选项(自托管或云托管)、高性能、对向量维度无硬性限制、元数据过滤、混合搜索功能以及免费的自托管版本。
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。