选择文档存储
本文将介绍不同类型的文档存储,并解释它们的优缺点。
引言
无论您是在开发聊天机器人、RAG 系统还是图像标注器,在某个时候,您的 AI 应用程序很可能会需要将输入的收到的信息与其已知的知识进行比较。大多数情况下,这种比较是通过向量相似性搜索完成的。
如果您不熟悉向量,可以将它们想象成一种将文本、图像或音频/视频表示为称为向量嵌入的数值形式的方式。向量数据库专门用于高效地存储此类向量,提供 AI 应用程序实现数据检索和相似性搜索所需的所有功能。
文档存储是 Haystack 中的特殊对象,它们将所有不同的向量数据库抽象为一个通用接口,该接口可以轻松地集成到管道中,最常见的方式是通过 Retriever 组件。通常,我们会为 Haystack 支持的每种向量数据库找到专门的文档存储和 Retriever 对象。
向量数据库的类型
但为什么向量数据库如此不同,您应该在 Haystack 管道中使用哪一个?
我们可以将向量数据库分为五类,从更专业的到通用的
- 向量库
- 纯向量数据库
- 支持向量的 SQL 数据库
- 支持向量的 NoSQL 数据库
- 全文搜索数据库
我们正在努力在 Haystack 中支持所有这些类型。
在此期间,这是可用集成的一些最新概述
摘要
以下是 Haystack 中不同文档存储的快速摘要。
继续阅读下文,以更复杂的解释每种类型的优势和劣势。
| 类型 | 最适合 |
|---|---|
| 向量库 | 有效管理硬件资源。 |
| 纯向量数据库 | 管理大量高维数据。 |
| 支持向量的 SQL 数据库 | 较低的维护成本,侧重于结构化数据,而非向量。 |
| 支持向量的 NoSQL 数据库 | 将向量与结构化数据相结合,没有传统关系模型的限制。 |
| 全文搜索数据库 | 卓越的全文搜索,生产环境可靠。 |
| 内存式 | 快速、最小化的原型设计,适用于小型数据集。 |
向量库
向量库经常被错误地归入“向量数据库”类别,因为它们仅限于处理向量,设计为在内存中工作,并且通常没有干净的方式将数据存储在磁盘上。不过,当性能和速度是您 AI 应用程序的首要要求时,它们是最佳选择,因为这些库可以非常有效地利用硬件资源。
进行中
我们目前正在开发 Haystack 中对向量库的支持。
纯向量数据库
纯向量数据库,也称为“向量数据库”,通过先进的索引技术提供高效的相似性搜索功能。它们中的大多数支持元数据,尽管最近有一种趋势在其之上添加更多文本搜索功能,但您应该将纯向量数据库视为更接近向量库而不是常规数据库。当您的应用程序需要有效管理海量高维数据时,选择一个纯向量数据库:它们被设计为高度可扩展且高度可用。大多数是开源的,但公司通常通过付费订阅将其作为“服务”提供。
支持向量的 SQL 数据库
这一类别相对较小但增长迅速,包括通过插件或扩展添加了向量功能的一些知名关系数据库。它们的性能不如前几类,但这些数据库的主要优点是可以轻松地将向量与结构化数据相结合,为您的应用程序提供一个一站式的数据商店。当性能的权衡可以通过维护单个应用程序数据库实例的较低成本来弥补,或者当结构化数据在您的业务逻辑中起更重要的作用,而向量更多的是锦上添花时,您应该选择一个支持向量的 SQL 数据库。
支持向量的 NoSQL 数据库
历史上,NoSQL 数据库的杀手级功能是水平扩展能力以及采用灵活的数据模型来克服传统关系模型的某些限制。这仍然适用于此类别中的数据库,其中向量功能是在现有功能之上添加的。与前一类类似,向量支持可能不如纯向量数据库好,但同样,存在一个权衡,根据用例可能方便承担。例如,如果某个 NoSQL 数据库已经是您应用程序堆栈的一部分,并且较低的性能不是一个决定性因素,您可以尝试一下。
全文搜索数据库
全文搜索数据库的主要优点是它们已经设计为处理文本,因此您可以期望对文本数据有很高的支持,同时具有良好的性能以及水平和垂直扩展的机会。最初,向量功能是欠佳的,通过插件或扩展提供,但这正在迅速改变。您可以看到该类别中的市场领导者最近是如何添加对向量的一流支持的。如果您选择全文搜索数据库,则文本数据在您的业务逻辑中起着核心作用,这样您就可以轻松有效地实现混合搜索等技术,并获得对相似性搜索的良好支持以及对全文搜索的最新支持。
内存式文档存储
Haystack 提供了一个临时的文档存储,它依赖于存储在内存中的纯 Python 数据结构,因此它不属于上述任何向量数据库类别。这种特殊的文档存储非常适合使用小型数据集创建快速原型。它不需要任何特殊的设置,并且可以在安装额外依赖项的情况下立即使用。
最终考虑
仅凭纯性能来挑选一个向量数据库而不是另一个可能会非常困难,因为即使是基准测试中的微小差异也可能产生不同的排行榜(例如,有些基准测试测试云服务,而其他基准测试在参考机器上运行)。考虑是否包含过滤等功能会带来全新的复杂性,使得比较更加困难。
您需要知道的重要一点是,文档存储接口并没有增加太多成本,当在 Haystack 管道中使用时,一个向量数据库相对于另一个的相对性能应该保持不变。
更新于 7 个月前
