数据库领域的发展日新月异,已涵盖众多细分市场和应用场景。如今,一个全新的数据库类别 ------ 向量数据库,正在迅速崛起。这一创新得益于生成式人工智能技术的飞速进步,以及大语言模型在各行各业的广泛应用。向量数据库的出现,无疑将引领数据处理的变革,为我们带来前所未有的可能性。本文将围绕向量数据库,详细介绍向量存储的高级分类,并尝试从在企业规模上构建生成式人工智能应用程序的角度来审视这个新市场。
选择向量存储
向量存储分类
向量库(Vector Libraries)
一些知名的开源库可以直接在应用程序代码中使用,用于存储和搜索向量。这些库通常使用计算机的内存空间,从企业数据库的可扩展性角度来考虑的话不适用,但适用于小型项目。
最受欢迎的向量库包括 Meta 发布的 FAISS、Spotify 的 Approximate Nearest Neighbor Oh Yeah(ANNOY)、Non-Metric Space Library(NMSLIB) 和 Scalable Nearest Neighbors(ScaNN) 等等。
单一向量数据库(Vector-Only Databases)
单一向量数据库通常仅用于向量场景,其中开源和商业可用的产品都有。单一向量数据库的缺点是,在多数情况下,这些数据库通常无法在某一点之上进行扩展,并且缺乏企业级功能,例多部署选项(本地部署、混合部署和云端部署)、灾难恢复(DR)、ACID 合规性、数据安全和治理以及多 AZ 部署等。对于较小的项目和原型,这种方法效果就很好,因为可以快速启动,用于搜索 PDF 或其他非结构化数据文件。
还有需要注意的是查询效率问题,这些数据库仅存储有关数据本身的少量元数据,因此为了检索完整的文本或文件时需要进行两次调用,第一次是向量数据库获取搜索结果,然后根据元数据,进行第二次调用以获取实际数据。这取决于应用程序的复杂性以及数据是否分布在多个数据库中,这些会迅速增加。
企业级向量数据库(Enterprise Databases with Vectors)
除了向量数据库和单一向量数据库外,目前几乎所有主流数据库都增加了向量功能。包括 MongoDB、Neo4j、Couchdb 和 Postgres 等。在超大规模数据库方面,AWS 在 OpenSearch Service、Redis 的 MemoryDB、Amazon DocumentDB 和 Amazon DynamoDB 中引入了向量支持。同样,Google 通过开源扩展 pgvector 在 PostgreSQL 的 AlloyDB 中引入了向量。自2017年以来已经具备向量功能并支持精确关键字匹配的企业数据库之一是 SingleStore。在 2023 年,他们也宣布支持向量索引。
不过,传统巨头 Oracle 和 SQL Server 还没有支持向量存储,但很可能会在接下来的几个月内增加对原生向量的支持。在数据仓库类别中,Databricks 也于 2023 年 11 月起增加了对向量的支持。
企业级向量数据库的优势:
- 更广泛的数据处理:这些数据库提供向量处理功能,同时还具备传统数据库的功能,比如支持 SQL 或 JSON 数据。这意味着公司不需要再购买另一个数据库导致数据架构进一步复杂化。
- 在 RAG 中的多功能性:结构化和向量数据检索的结合可以为生成模型提供更丰富的上下文语境,从而基于上下文感知实现更准确的响应。
FAISS(Facebook AI Similarity Search)
FAISS 是Facebook (现 Meta) 的 AI 团队开发的开源库,专门用于高效相似性搜索和密集向量的聚类。它特别适用于大规模向量搜索任务,在 AI 研究中被广泛用于图像和视频检索等任务。FAISS 擅长处理高维数据,但不直接支持 SQL 或 JSON 等结构化、半结构化数据类型。它是一个向量库,而不是一个完整的数据库,并且不提供托管或云服务。
优点
- 针对大规模向量搜索进行了优化,能够高效处理高维数据。
- 对 GPU 的支持提高了 AI 驱动应用程序的性能。
- 开源并在 AI 研究社区广泛使用。
缺点
- FAISS 是一个向量库,而不是一个独立的数据库,需要与其他系统集成。
- 仅限于向量操作,缺乏更广泛的数据库管理功能。
- 需要专业的技术知识来实施和优化。
ANNOY(Approximate Nearest Neighbors Oh Yeah)
ANNOY 由 Spotify 开发,也是一个开源项目,用于在高维空间中进行内存高效和快速的近似最近邻搜索,适用于需要快速反馈、获得近似结果的场景。ANNOY 是一个向量库而不是数据库,不提供托管服务。它专注于向量操作,不原生支持 SQL 等结构化数据类型。
优点
- 快速且内存高效,用于近似最近邻搜索。
- 在高维空间中特别有效。
- 开源且易于与其他系统集成。
缺点
- 侧重于近似结果,不适用于需要高精度的应用。
- 作为一个向量库,缺乏全面的数据库功能。
- 对结构化数据类型的支持有限。
SCANN (Scalable Nearest Neighbors)
SCANN 是由Google Research 开发的开源库,专门用于大规模最近邻搜索。它在高维空间中提供了精确和高效的平衡,并设计用于需要精确向量搜索能力的用例。与 FAISS 和 ANNOY 一样,SCANN 是一个专注于向量操作的库,不提供对结构化数据类型或托管服务的原生支持。
优点
- 在向量搜索中平衡准确性和效率。
- 由谷歌研究开发,具有可靠性和稳健性。
- 适用于大规模、精确的向量搜索任务。
缺点
- 实施和调优的复杂性以实现最佳性能。
- SCANN 是一个搜索向量库,而不是一个完整的数据库解决方案。
- 缺乏对结构化数据类型的本地支持。
Pinecone
Pinecone 是一个面向可扩展、高性能相似度搜索的向量数据库服务,适用于推荐系统和人工智能搜索等应用。作为一个完全托管的云服务,Pinecone 简化了向量搜索系统的部署和扩展。它主要专注于向量数据,但也可能支持与其他数据类型和系统的集成。
优点
- 专为可扩展、高性能的相似性搜索而设计。
- 完全托管的云服务,简化部署和扩展。
- 适用于人工智能驱动的搜索和推荐系统。
缺点
- 作为专业服务,可能不涵盖更广泛的数据库功能。
- 相对较新的产品,存在生产数据库级功能方面的困难。
- 潜在依赖云基础设施和相关成本。
Weaviate
Weaviate 是一个面向可扩展语义搜索的开源基于图形的向量数据库。它支持各种数据类型,包括非结构化数据,并可以与机器学习模型集成,实现数据的自动向量化。Weaviate 提供云端和自托管部署选项,适用于需要图形数据库特性和向量搜索结合的应用程序。
优点
- 将图数据库功能与向量搜索相结合。
- 支持各种数据类型和自动向量化的开源软件。
- 灵活的部署选项,包括云端和自托管。
缺点
- 由于其图形和向量特性的组合,设置和管理变得复杂。
- 可能需要额外的资源来有效处理大规模部署。
- 特有的功能组合可能会增加学习成本。
Milvus
Milvus 是一个开源的向量数据库,针对处理大规模、高维度向量数据进行了优化。它支持多种索引类型和度量标准,以实现高效的向量搜索,并可以与各种数据类型集成。Milvus 可以部署在本地或云端,适用于不同的运营环境。
优点
- 开源且优化用于处理大规模向量数据。
- 支持多种索引类型和指标,实现高效搜索。
- 灵活的部署选项,包括云端和本地部署。
缺点
- 主要关注向量数据,对其他数据类型的支持有限。
- 可能需要针对特定用例和数据集进行调整。
- 管理大规模部署可能会比较复杂。
ChromaDB
Chroma 在2023年6月正式发布,是用于构建带有嵌入向量的AI应用程序的数据库,Chroma 通过使知识、事实和技能可插拔化,使构建 LLM 应用变得更加容易,它内置了入门所需的一切,并提供了简单的 API。
优点
- 适用于需要高吞吐量和低延迟的向量搜索应用。
- 优化了 GPU 加速,提高了 AI 驱动应用程序的性能。
缺点
- ChromaDB 仍在不断开发和完善中,可能会存在稳定性问题。
Qdrant
Qdrant 是一个开源的向量搜索引擎,支持高维向量数据。它专为向量数据的高效存储和检索而设计,并提供过滤和全文搜索等功能。Qdrant 可在云端或本地环境中使用,适用于需要高效向量搜索能力的各种应用程序。
优点
- 开源且设计用于高效的矢量数据存储和检索。
- 提供过滤和全文搜索等功能。
- 可在云端和本地环境中使用。
缺点
- 作为专业的向量搜索引擎,缺乏一些更广泛的数据库管理功能。
- 需要专业技术知识来进行优化和部署。
- 作为一种较新的产品,与已建立的数据库相比,可能拥有较小的社区和更少的资源。
Vespa
Vespa 是由 Yahoo 开发的开源大数据服务引擎,提供存储、搜索和组织大型数据集的功能。它支持各种数据类型,包括结构化和非结构化数据,并适用于需要实时计算和数据服务的应用程序。Vespa 可以部署在云端和自托管环境中。
优点
- 由 Yahoo 开发,提供强大的稳定性和可靠性。
- 支持多种数据类型,适用于大型数据集。
- 实时计算和数据服务能力。
缺点
- 由于其广泛的功能集,配置和管理复杂。
- 可能需要大量资源以实现最佳性能。
- 对于简单的应用程序来说,功能的广泛范围可能有些多余。
Elasticsearch
Elasticsearch 是一个广泛使用的开源搜索和分析引擎,以其强大的全文搜索能力而闻名。它支持各种数据类型,包括 JSON 文档,并提供可扩展的搜索解决方案。Elasticsearch 可以部署在云端或本地,并已扩展其功能以包括向量搜索,使其适用于各种搜索和分析应用。
优点
- 强大的全文搜索功能和可扩展的搜索解决方案。
- 支持基于文本和基于向量的语义搜索。
- 广泛采用的开源项目,拥有强大的社区支持。
- 支持多种数据类型。
缺点
- Elasticsearch 使用 ELSER,这是一个用于向量搜索的黑盒模型,这不像使用自己的嵌入和搜索模型那样提供细粒度控制。
- 可能会消耗大量资源,特别是对于大型集群而言。
- 大规模部署的调优和维护复杂性。
- 作为搜索引擎,可能需要额外的组件来实现完整的数据库功能。
MongoDB
MongoDB 是一种流行的开源、基于文档的数据库,以其灵活性和易用性而闻名。它支持广泛的数据类型,主要是类似 JSON 的文档。MongoDB 提供基于云的服务 MongoDB Atlas 以及本地部署选项。虽然传统上专注于文档存储,但 MongoDB 已经开始加入更多处理向量数据的功能。
优点
- 灵活易用,对类似JSON的文档有很好的支持。
- 可扩展并在各行业广泛采用。
- 提供基于云的服务和本地部署选项。
缺点
- MongoDB 之前并不专注于向量搜索,在这个领域属于新成员。
- 文档导向模型可能并非所有用例的理想选择,特别是基于分析的情况。
- 性能可能会根据工作负载和数据模型而有所不同。
SingleStore
SingleStore(前身为 MemSQL)是一种商业数据库,以其高性能和可扩展性而闻名。它将内存数据库技术与对结构化 SQL 查询的支持相结合,适用于各种应用,包括实时分析和事务处理。SingleStore 提供基于云和本地部署的选项。
优点
- 支持多种数据类型,如 SQL、JSON(兼容MongoDB API)、Geospatial(地理空间)、键值对等。
- 将数据存储在专利的行和列存储中,使其非常适用于事务处理和分析用例。
- 高性能和可伸缩性,适用于毫秒级响应时间。
- 将内存数据库技术与 SQL 支持相结合。
- 提供基于云和本地部署两种选择。
缺点
- 不支持图形数据类型。
- 不太适合简单的原型应用。
Supabase
Supabase 是 Firebase 的开源替代品,提供一套工具用于构建可扩展的 Web 和移动应用程序。它提供基于 PostgreSQL 的数据库,具有实时功能,并支持广泛的数据类型,包括 SQL。Supabase 提供云托管服务,以其易用性和与各种开发工具的集成而闻名。
优点
- 一种开源替代 Firebase 的选择,提供一套应用开发工具。
- 实时功能,支持包括 SQL 在内的多种数据类型。
- 轻松集成和使用的云托管服务。
缺点
- 作为一个相对较新的平台,可能会有成长的烦恼和不断发展的特性。
- 对 PostgreSQL 的依赖可能会限制某些类型的可扩展性。
- 社区和第三方资源正在增长,但还不如更成熟的数据库那样广泛。
Neo4J
Neo4J 是一种商业图形数据库,以其在管理连接数据方面的强大功能而闻名。它支持各种数据类型,专注于图形结构,并用于需要复杂关系映射和查询的应用程序,Neo4J 可以部署在基于云和本地环境中。
优点
- 具有处理图结构连接数据的强大功能。
- 用于复杂关系映射和查询。
- 灵活部署,可选择云端和本地部署。
缺点
- 专注于图数据库功能,可能并不适合所有用例,特别是事务性或分析用例。
- 可能会消耗大量资源,特别是对于大型图形。
- 图数据库通常上手难度更大。
Redis
Redis 是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。它支持各种数据类型,如字符串、哈希、列表和集合。Redis以其速度而闻名,通常用于缓存、会话管理和实时应用程序,它提供云托管和自托管部署选项。
优点
- 极快的内存数据结构存储。
- 多功能的数据库、缓存和消息代理。
- 广泛采用,得到强大的社区支持。
缺点
- 内存存储在数据大小和持久性要求方面可能存在限制,并且内存对于所有数据使用情况来说成本较高。
- 数据模型可能不适用于复杂的关系数据结构。
- 在较大的设置中,管理持久性和复制可能会很复杂。
PostgreSQL
PostgreSQL 是一个功能强大的开源对象关系数据库系统,以其可靠性、功能强大和性能而闻名。它支持各种数据类型,包括结构化的 SQL 数据和 JSON。PostgreSQL 可以部署在本地或云端,并广泛应用于各种应用程序,从小型项目到大型企业系统。通过使用 pgvector 可以将 Postgres 用作矢量数据库。Google、AWS 和 Azure 分别提供了 Postgres 和 pgvector 作为服务的版本 ------ AlloyDB、Aurora Postgres 和 Azure SQL Hyperscale。
优点
- 强大、功能丰富、可靠的对象关系数据库系统。
- 支持多种数据类型,包括结构化的 SQL 和 JSON。
- PostgreSQL 是开源项目,拥有广泛的社区支持和资源。
缺点
- 对于大规模部署来说可能会消耗大量资源并且成本昂贵。
- 不支持事务和分析用例。
- 特性相对复杂,对新用户不友好。
结语
由于 LLM 和生成式人工智能的兴起,我们看到向量和语义搜索成为数据库中新兴和最受欢迎的特性之一。本文从使用 RAG 构建应用程序的角度管中窥豹,随着向量数据库的不断发展,这一领域可能还会给我们带来惊喜。