数据库即用来组织、存储和管理数据的仓库,允许用户和程序以各种方式访问和处理数据。数据库的设计旨在管理大量信息,同时支持快速访问、高效查询、可靠的事务处理和并发访问。
随着嵌入技术的普及,向量数据库应运而生。曾经,嵌入技术是科技巨头的专利,用于推动推荐系统和搜索功能。如今,通过深度学习,开发者能够将文本、图像、视频等各类内容转化为向量表示,借助预训练模型和直观的API,将复杂的研究转变为实用工具。这使得开发者能够构建出以往只有大型科技公司才能实现的功能,极大地拓展了应用的边界。
向量数据库的兴起,正是为了应对嵌入技术应用爆炸性增长所带来的挑战——如何高效地存储、索引和搜索大规模的高维向量。Pinecone等公司在2022-2023年引领了这一潮流,定义了专门的向量操作基础设施。然而,局势迅速演变,最初的纯向量搜索引擎开始扩展功能,以匹配传统搜索功能。向量数据库提供商逐渐认识到,现实世界的应用往往需要的不仅仅是相似性搜索,他们越来越多地添加过去属于传统搜索引擎的功能,如过滤、分面和文本搜索能力。
这种融合反映了一个更深刻的认识,即单纯的向量搜索不足以满足实际的现实世界需求。Elasticsearch作为搜索市场的领导者,其演变过程尤为典型。2024年,Elasticsearch重新定位为“一个全面整合向量数据库的搜索引擎”,通过优化索引结构和增加对高效近似最近邻(ANN)搜索算法的支持,将向量搜索能力直接引入搜索平台。这表明未来的搜索在于结合传统搜索功能与嵌入技术,向量搜索只是现代搜索工具箱中的一个重要能力。
与此同时,老牌数据库供应商对向量数据库的兴起有着不同的应对策略。他们没有将向量搜索视为一个独立的类别,而是将其直接整合到现有产品中。PostgreSQL、MongoDB、Redis等纷纷增加了对向量数据类型和相似性搜索操作的原生支持,将其视为添加新索引类型一样平常。从他们的角度来看,向量只是另一种需要索引和查询的数据类型,类似于文本、数字或地理空间坐标。这种整合简化了许多应用的架构,使开发者能够在熟悉的系统中管理向量操作,与传统数据工作负载并行,而无需说服CTO采用另一种专门的数据库。
向量数据库(Vector Database)是指以向量形式存储数据集合的数据库,通常通过对原始数据应用某种变换或嵌入函数生成向量并进行管理、存储、检索,是非关系型数据库的一种。相较于传统数据库,向量数据库的核心在于数据向量化和相似性搜索。
| 对比项 | 向量数据库 | 关系数据库 |
|---|---|---|
| 核心数据模型 | 高维向量 | 表关系 |
| 主要索引机制 | 基于ANN检索(基础检索)、向量量化检索、哈希索引等 | B树、哈希表等 |
| 查询优化 | 向量检索优化、针对相似度检索 | SQL优化器、针对结构化检索 |
| 拓展性和分布式特性 | 分布式处理 | 垂直扩展优于水平扩展 、新型数据库更好支持分布式特性 |
| ACID支持 | 事务支持较弱,侧重读操作 | 全面ACID支持 |
| 数据与关系复杂度 | 高数据复杂度,关系复杂度取决于应用 | 高数据复杂度,低至中等关系复杂度 |
| 开发与维护成本 | 需特定领域知识(如机器学习)、维护成本随技术栈变化 | 技术成熟、成本稳定 |
| 生态系统和社区支持 | 快速发展,特别是AI、机器学习、大模型等工具和框架的集成 | 成熟且广泛、大量工具和库应用 |
| 典型应用场景 | 多模态检索、推荐系统、自然语言处理等 | 业务系统、ERP等 |
向量数据库的机遇
AI应用的有力支撑
在AI时代,向量数据库为AI应用提供了强大的数据处理能力。它能够高效地存储和检索高维向量数据,为机器学习模型的训练和推理提供了坚实的基础。例如,在自然语言处理领域,向量数据库可以快速检索与给定文本相似的语句,为聊天机器人、文本生成等应用提供丰富的上下文信息。在图像识别领域,它能够快速匹配相似的图像特征,为图像搜索、目标检测等应用提供支持。多模态数据融合
随着数据类型的日益丰富,多模态数据融合成为AI应用的发展趋势。向量数据库能够同时处理文本、图像、音频等多种类型的数据,将不同模态的数据转化为统一的向量表示,实现多模态数据的融合检索。这为构建更加智能、更加全面的AI应用提供了可能,例如,一个智能助手可以通过同时分析文本、图像和音频信息,更准确地理解用户的需求并提供相应的服务。云服务的推动
云服务的普及为向量数据库的发展提供了新的机遇。数据库即服务(DBaaS)模式使得用户无需关心底层的硬件和运维,只需专注于应用开发。向量数据库可以作为云服务的一部分,提供弹性扩展、高可用性和灾备等特性,满足用户对大规模数据处理的需求。同时,云服务提供商可以利用其强大的计算和存储资源,优化向量数据库的性能,降低成本,提高服务质量。
向量数据库的挑战
技术局限性
尽管向量数据库在AI应用中发挥着重要作用,但目前的技术仍存在诸多局限性。首先,向量数据库的查询效率有待提高。在处理大规模高维向量数据时,查询速度可能会受到限制,影响应用的实时性。其次,向量数据库的索引构建和优化是一个复杂的问题。不同的数据分布和查询模式需要不同的索引策略,而目前的索引算法还不能很好地适应各种情况。此外,向量数据库的存储成本也是一个不容忽视的问题。高维向量数据需要占用大量的存储空间,如何在保证查询性能的前提下降低存储成本,是向量数据库需要解决的难题之一。功能不完善
与传统数据库相比,向量数据库的功能还不够完善。许多向量数据库不支持预定义的Schema,缺乏高级查询语言,查询接口随意,泛化能力弱。这使得开发者在使用向量数据库时,需要花费更多的时间和精力来构建和优化查询。此外,向量数据库在数据一致性和事务支持方面也存在不足。在并发写入和更新场景下,数据的可见性和一致性难以保证,这可能会影响应用的正确性和稳定性。市场竞争与标准化
向量数据库市场正处于快速发展阶段,各种产品和技术层出不穷。然而,市场的竞争也带来了标准化的挑战。不同的向量数据库产品在数据格式、查询接口、性能指标等方面存在差异,这给用户的选择和应用的迁移带来了困难。此外,向量数据库的标准化工作还处于起步阶段,缺乏统一的规范和标准。这可能导致市场混乱,影响向量数据库的健康发展。
数据存储形式
传统数据库通常以表格形式存储结构化数据,向量数据库则通过Embedding技术,将非结构化数据转换为向量数据进行存储,可以将文本、图像、音频、视频等数据转换为高维度的向量,能够更高效地处理更大规模数据。
数据索引与查询方式
传统数据库使用传统的索引结构(B树、哈希索引等),基于精确的数值或关键字进行查询,结果是明确符合条件的数据记录。向量数据库则是模糊查询,使用kd-tree、LSH、HNSW等特殊的索引方式,通过计算一个向量与其他所有向量之间的距离快速在大规模向量数据集中找到最相似的向量,支持复杂的查询操作,如相似性搜索、范围查询等。
发展及应用
2023年起,随着大规模生成式 AI 模型的崛起,以人工智能(Artificial Intelligence,AI)为代表的新一代信息技术快速创新应用,带动数据处理需求的爆发式增长以及数据类型的多元化,向量数据库有望得到更加广泛的应用。互联网作为AI率先推进和落地的场景,各大巨头陆续下场研发向量数据库产品。
向量数据库之所以能够成为大模型发展的技术基座,主因非结构化数据应用的增加和大模型发展,导致传统数据库在高维数据存储、查询、任务响应上逐渐显露瓶颈,而向量数据库能够高效地存储、利用相似性度查询快速索引数据,使其可以在大模型训练和推理阶段提升任务的效率,同时降低算力成本。
训练阶段
数据导入时,向量数据库可以将非结构化数据进行清洗、筛选,统一数据格式,便于后续交互计算。推理阶段
首先,由于大模型是基于已有数据训练而得出的,训练数据在时间和空间上均有限制,而向量数据库可以作为外部知识库的角色,作为知识库的扩展插件为大模型进行知识增强,减少大模型生成时可能出现的“幻觉效应”。
技术路径
从技术路径上看,现有向量数据库产品可以分为两类,专业的向量数据库(Native)或使用传统数据库增加向量检索功能(Extend)。Native向量数据库还可进一步分为两种类型mostly vector(只有向量检索)和mostly hybrid(支持混合检索),分别适用于不同应用场景。
支持GPU、FPGA、TPU等异构计算
向量数据库与传统数据库一大区别在于依靠各种相似度度量方法来找到与给定查询最相近的向量,涉及如点积、欧式距离、余弦相似度等大量的相似度计算,这些计算可能会消耗大量的计算资源和时间。
目前主流向量数据库大多采用CPU进行计算,但随着 LLM 的兴起,尤其在一些对性能、延迟有着极高要求的场景,只通过 CPU 索引来支撑的难度越来越高,在处理高维向量和大规模数据时,采用GPU方案有望进一步提高计算效率。
发展支持存算分离的云原生架构
向量需要有大量的资源去构建索引,这个过程会面临比较大的资源开销,但是构建完成后这部分资源会闲置,同时,在不同量级数据的查询时也会需要资源弹性缩放,但在存算一体架构中,计算和存储通常是紧密耦合的,意味着必须以相同的速度扩展存算节点,导致在只需要拓展计算或存储资源的情况下,资源使用率不高。因此,从降本提效的角度看,支持存算分离的云原生架构,可以实现计算层的快速扩容和缩容,用弹性资源去满足这种短时间的需求。
主流向量数据库
向量库和向量数据库之间的主要区别在于,向量库用于对向量进行数学运算和几何计算,而向量数据库用于存储、搜索和管理大规模向量数据集,例如嵌入,用于机器学习和数据科学应用。 向量库,如NumPy,提供广泛的数学运算和函数,用于处理向量、矩阵和高维数组。它们优化了性能,并在科学计算、数据分析和学习中被广泛使用。向量库适用于小到中等规模的数据集,并且不提供内置的高维向量相似性搜索或大规模数据管理的支持。 另一方面,向量数据库,如Milvus、Pinecone和Weaviate,旨在处理大规模向量数据集,并提供高效的向量相似性搜索和管理功能。它们支持高维向量,并提供先进的索引技术,如HNSW、IVF和PQ,以实现快速和准确的向量相似性搜索。向量数据库还提供可扩展性和容错性,使其适合生产环境和实际应用。
向量数据库为向量嵌入的独特结构提供了高效的存储和查询能力。它们通过发现相似性,为简单搜索、高速度、可扩展性和数据检索打开了大门。
| 名称 | 开发商 | 所在国家 | 是否开源 | 官网 | 源码地址 | 开发语言 | 欢迎程度(2025.04.08) | 许可协议 |
|---|---|---|---|---|---|---|---|---|
| Pinecone | Edo Liberty | 美国 | 否 | 官网 | github | python;typescript;go;rust | – | – |
| MongoDB | MongoDB | 美国(总部) | 是 | 官网 | github | GO;Python;Javascript; Java;TypeScript | 27k | SSPL v1 |
| Milvus | Zilliz | 美国 | 是 | 官网 | github | go(61.8%); python(18.8%); c++(17.7%) | 34k | Apache-2.0 license |
| Chroma | Chroma | 美国(旧金山) | 是 | 官网 | github | GO(61.5%); Python(18.9%); C++(18.1%); | 33.9k | Apache-2.0 license |
| Weaviate | Weaviate | 远程团队 | 是 | 官网 | github | go(96.4%); python(0.9%); assemble(1.6%) | 13k | BSD-3-Clause license |
| Deep Lake | Activeloop | – | 是 | 官网 | github | python | 8.5k | Mozilla public license |
| Qdrant | Qdrant | 远程团队 | 是 | 官网 | github | rust(86.9); python(10.7%)); c | 22.9k | Apache License |
| Elasticsearch | Elasticsearch | – | 是 | 官网 | github | java;groovy | 72.3k | – |
| Vespa | Vespa | 挪威 | 是 | 官网 | github | java(54%); c++(43%); go(1.2%) | 6.1k | Apache-2.0 license |
| Vald | – | – | 是 | 官网 | github | go;(91.9%); rust(5.0%); | 1.6k | Apache-2.0 license |
| ScaNN | – | – | 是 | [官网] | github | Jupyter Notebook(49.2%); Python(44.5%); C++(3.0%) | 35.3k | Apache-2.0 license |
| Pgvector | – | – | 是 | 官网 | github | c(77,1%); perl(22,2%) | 15k | PostgreSQL全球开发小组 加州大学董事会 |
| Faiss | – | – | 是 | 官网 | github | c++(59.9%); Python(19.6%); Cuda(16.6%); c(1.7%) | 34.2k | MIT license |
| ClickHouse | – | – | 是 | 官网 | github | c++(79.0%); python(9.1%); c(3.5%) | 40k | Apache-2.0 license |
| OpenSearch | – | – | 是 | 官网 | github | java(99.7%);s | 10.5k | Apache-2.0 license |
| Apache Cassandra | Apache子项目 | – | 是 | 官网 | apache | – | – | – |
| VectorDB | 腾讯云 | 中国 | 是 | 官网 | 无 | – | – | – |
| DingoDB | 九章云极 | 中国 | 是 | 官网 | github | java(98.4%) | 1.4k | Apache-2.0 license |
| VikingDB | 火山引擎 | 中国 | 是 | 官网 | 无 | – | – | – |
| VectorDB | 百度智能云 | 中国 | 是 | 官网 | 无 | – | – | – |
| tensorDB | 爱可生 | 中国 | 是 | 官网 | 无 | – | – | – |
| Vearch | 京东云 | 中国 | 是 | 官网 | 无 | – | – | – |
| hippo | 星环科技 | 中国 | 是 | 官网 | 无 | – | – | – |
| Om-iBASE | 联汇科技 | 中国 | 是 | 官网 | 无 | – | – | – |
| ArcVectir | 枫清科技 | 中国 | 是 | 官网 | 无 | – | – | – |
向量库(FAISS、HNSWLib、ANNOY)
向量数据库与向量库的区别在于,向量库主要用于存储静态数据,其中索引数据是不可变的。这是因为向量库只存储向量嵌入,而不存储生成这些向量嵌入的关联对象。因此,与向量数据库不同,向量库不支持CRUD(创建、读取、更新、删除)操作。这意味着在FAISS或ANNOY等向量库中向现有索引添加新文档可能比较难做到。HNSWLib就是这个例外,它就有CRUD功能,同时独特地支持并发读写操作。但是它也难逃作为一个向量库的局限性,即不提供部署生态系统、复制实例的能力以及容错性。
全文搜索数据库(ElasticSearch,OpenSearch)
全文搜索数据库(例如ElasticSearch和OpenSearch)能支持比较全面的文本检索和高级分析功能。但是当涉及到执行向量相似性搜索和处理高维度数据时,它们与专门的向量数据库相比就不够强了。这些数据库往往需要与其他工具搭配使用才能实现语义搜索,因为它们主要依赖于倒排索引而不是向量索引。根据Qdrant的测试结果,Elasticsearch在与Weaviate、Milvus和Qdrant等向量数据库相比时,性能有所落后。
支持向量的SQL数据库(pgvector、Supabase、StarRocks)
像pgvector这样的SQL数据库通过它们的向量支持扩展,提供了一种将向量数据整合到现有数据存储系统中的方式,但与专用的向量数据库相比,它们也又一些明显的缺点。
最明显的缺点是,传统SQL数据库的关系模型与非结构化向量数据的本质之间存在不匹配。这种不匹配导致了涉及向量相似性搜索的操作效率低下,这类数据库在构建索引和处理大量向量数据时性能表现并不理想,详见ANN测试。此外,pgvector支持的向量维度上限(2000维)与像Weaviate这样的专用向量数据库相比显得较低,后者能够处理高达65535维的向量数据。在可扩展性和效率方面,专用向量数据库也更有优势。支持向量的SQL数据库扩展,例如pgvector,更适合于向量数据量较小(少于10万个向量)且向量数据仅作为应用程序的一个补充功能的场景。相反,如果向量数据是应用的核心,或者对可扩展性有较高要求,专用向量数据库就会是更合适的选择。
至于StarRocks,它是另一个运行在SQL框架之上的系统,它针对在线分析处理(OLAP)和在线事务处理(OLTP)场景进行了优化,但也没有专门针对向量相似性搜索进行优化。
支持向量的NoSQL数据库(Redis,MongoDB)
NoSQL数据库中新增加的向量支持功能尚属初级阶段,且尚未经过充分的测试验证。以Redis向量相似性搜索(VSS)为例,该功能刚于2022年4月对外发布,距今不足两年。Redis VSS虽然可以作为一个多功能数据库提供服务,但其并非专为向量相似性搜索而优化设计。
专用向量数据库(Pinecone、Milvus、Weaviate、Qdrant、Vald、Chroma、Vespa、Vearch,FAISS)
专用向量数据库天生支持各种向量运算,如点积、余弦相似度等。这些数据库专为处理高维度数据而设计,能够应对大量查询请求,并能迅速完成向量间的相似性搜索。为了达到这些目标,它们采用了多种索引策略,通常基于近似最近邻(ANN)算法。这些算法需要在效率、存储空间占用和搜索准确性之间做权衡。比如,FLAT索引是一种不使用任何优化或近似技术的向量索引,意味着可以实现100%的召回率和精确度,但它也比其他类型的向量索引更慢且效率更低;相对而言,IVF_FLAT索引通过牺牲一些精确度,以换取更快的搜索速度;HNSW索引则在准确性和搜索速度之间提供了一个折中方案。