首页 > 数据库 >您应该使用哪个矢量数据库? 选择最适合您需求的数据库

您应该使用哪个矢量数据库? 选择最适合您需求的数据库

时间:2024-09-01 12:55:08浏览次数:13  
标签:数据库 矢量 索引 搜索 哪个 数据 Milvus

导言

矢量数据库已成为存储非结构化和结构化数据表示并编制索引的首选。 这些表征被称为向量嵌入,由嵌入模型生成。 向量存储在利用深度学习模型(尤其是大型语言模型)的应用开发中发挥着至关重要的作用。

什么是矢量数据库?

在现实世界中,并非所有数据都能整齐地排列成行和列。 在处理复杂的非结构化数据(如图像、视频和自然语言)时尤其如此。

矢量数据库是一种以高维矢量形式存储数据的数据库,本质上是代表对象特征或特性的数字列表。 每个矢量对应一个独特的实体,如一段文本、图像或视频。

但为什么要使用矢量呢? 奥妙就在于它能够捕捉语义和相似性。 通过将数据表示为向量,我们可以对它们进行数学比较,并确定它们的相似或不相似程度。 这使我们能够执行复杂的查询,如 "为我查找与此相似的图片 "或 “检索与此文本语义相关的文档”。

为什么需要矢量数据库?

近年来,矢量数据库越来越受欢迎,尤其是在机器学习(ML)和人工智能(AI)领域。 人工智能和 ML 模型的复杂性要求采用有效的方法来存储、搜索和检索它们所处理的大量非结构化数据。

对于为结构化数据而构建的传统数据库来说,矢量数据的复杂性和大小可能经常会让它们难以承受。 相反,矢量数据库就是为此而专门设计的。 它们提供专门的搜索和索引算法,即使在拥有数十亿条目的数据库中,也能迅速找到可比较的矢量。

矢量数据库的不同用例

通过查找可比矢量的能力,人工智能和 ML 的应用得到了极大扩展。 典型用例包括:

  • RAG 系统: 矢量数据库可与大型语言模型(LLMs)相结合,构建以知识为基础的语言人工智能应用。
  • 推荐系统: 矢量数据库可以将用户偏好和项目属性表示为矢量,从而为高度个性化的推荐引擎提供动力。
  • 通过搜索视觉相关的图像或视频,矢量数据库彻底改变了基于内容的检索。
  • 自然语言处理: 矢量数据库通过将文本转换为矢量,提供语义搜索、主题建模和文档分组功能。
  • 欺诈检测: 矢量数据库可用于协助识别金融交易中的趋势和异常情况。

矢量数据库比较

目前有许多矢量数据库,如 Qdrant、Pinecone、Milvus、Chroma、Weaviate 等。 每个数据库都有自己的优势、利弊和理想用例。 在此,我们将对 Pinecone、Milvus、Chroma、Weaviate、Faiss、Elasticsearch 和 Qdrant 等流行的矢量数据库进行全面比较。

部署选项

在这方面,Pinecone 是个异数。 出于性能和可扩展性的考虑,Pinecone 是一项完全托管的服务,因此无法在本地运行实例。 Milvus、Chroma、Weaviate、Faiss、Elasticsearch 和 Qdrant 都可以在本地运行;其中大多数都提供了用于运行的 Docker 镜像。

在这里插入图片描述

可扩展性

Qdrant提供静态分片功能;如果数据增长超出服务器容量,则需要向集群添加更多机器,并重新分片所有数据。 这可能是一个耗时且复杂的过程。 此外,不平衡的分片会带来瓶颈,降低系统效率。

Pinecone 通过其 Serveless Tier 支持计算和存储的分离。 对于基于 POD 的集群,Pinecone 采用的是静态分片,要求用户在扩展集群时手动重新分片。

Weaviate 提供静态分片。 在没有任何分布式数据替换的情况下,Chroma 无法扩展到单节点以外的规模

在这里插入图片描述

性能基准测试

  • Qdrant几乎在所有场景中都实现了最高的RPS和最低的延迟,无论我们选择的精度阈值和指标如何。 在其中一个数据集上,它的 RPS 也提高了 4 倍。
  • Elasticsearch 在许多用例中都变得相当快,但在索引时间方面却非常慢。 当存储 1,000 多万个 96 维向量时,它可能会慢 10 倍! (32 分钟对 5.5 小时)
  • 在索引时间方面,Milvus 是最快的,而且精度也很高。 不过,当嵌入维度较高或向量数量较多时,Milvus 在 RPS 或延迟方面就无法与其他产品相提并论了。
  • Redis 能够实现较好的 RPS,但主要是在较低精度的情况下。 在单线程情况下,Redis 也能实现较低的延迟;但在并行请求较多的情况下,延迟会迅速增加。 速度提升的部分原因是其定制协议。
  • 随着时间的推移,Weaviate 的改进最小。 由于其他引擎的相对改进,就 RPS 和延迟而言,它已成为最慢的引擎之一。

在这里插入图片描述

数据管理

在这里插入图片描述

矢量相似性搜索

矢量数据库如此有用的原因之一是,它们可以告诉我们事物之间的关系,以及它们的相似或不相似程度。 矢量数据库可以通过各种距离度量来实现这一功能,不同的矢量数据库会采用不同的距离度量。

在这里插入图片描述

集成和应用程序接口

REST 应用程序接口更常见,而 GRPC 应用程序接口则面向延迟关键场景或需要快速移动大量数据时的性能和吞吐量。 根据您的要求和网络情况,GRPC 的速度可比 REST 快数倍。

在这里插入图片描述

社区和生态系统

开放源代码意味着我们可以浏览核心数据库的源代码,矢量数据库具有灵活的许可模式。

在这里插入图片描述

元数据过滤

元数据是一个非常强大的概念,与矢量数据库的核心功能相辅相成;它是模糊的人类语言与结构化数据之间的纽带。 这是架构的基础,当人类用户询问产品时,人工智能购物助手会立即回复他们所描述的产品。

在这里插入图片描述

向量数据库功能

  • Qdrant: Qdrant 使用三种类型的索引为其数据库提供动力。 这三种索引分别是有效载荷索引(类似于传统的面向文档数据库中的索引)、字符串有效载荷全文索引和矢量索引。 他们的混合搜索方法是矢量搜索与属性过滤的结合。
  • Pinecone: RBAC 对于大型企业来说是不够的。 存储优化(S1)在性能方面存在一些挑战,只能达到 10-50 QPS。 命名空间的数量有限,用户在使用元数据过滤作为绕过这一限制的方法时应小心谨慎,因为这将对性能产生很大影响。 此外,这种方法也无法实现数据隔离。
  • Weaviate: Weaviate 使用两种索引为其数据库提供支持。 一种是将数据对象属性映射到其在数据库中的位置的倒排索引,另一种是支持高性能查询的矢量索引。 此外,它的混合搜索方法使用密集向量来理解查询的上下文,并结合稀疏向量来进行关键字匹配。
  • Chroma:Chroma 使用 HNSW 算法来支持 kNN 搜索。
  • Milvus:Milvus 支持多个内存索引和表级分区,从而实现了实时信息检索系统所需的高性能。 支持 RBAC 是企业级应用的要求。 关于分区,通过将搜索限制在数据库的一个或多个子集上,分区可以提供比静态分区更有效的数据过滤方式,静态分区可能会带来瓶颈,当数据增长超出服务器容量时需要重新分区。 分区是一种管理数据的好方法,它可以根据类别或时间范围将数据分组为子集。 这可以帮助您轻松过滤和搜索大量数据,而无需每次都搜索整个数据库。 没有一种索引类型能适合所有的使用情况,因为每种使用情况都有不同的权衡标准。 有了更多索引类型的支持,您就可以更灵活地在准确性、性能和成本之间找到平衡。
  • Faiss: FAISS 是一种支持 kNN 搜索的算法

总体比较摘要

在这里插入图片描述

标签:数据库,矢量,索引,搜索,哪个,数据,Milvus
From: https://blog.csdn.net/weixin_41446370/article/details/141782198

相关文章

  • 校园便利|基于SprinBoot+vue的校园便利平台(源码+数据库+文档)
    校园便利平台基于SprinBoot+vue的校园便利平台一、前言二、系统设计三、系统功能设计 系统前台实现系统首页功能用户后台管理功能管理员功能实现四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设......
  • NoSQL:数据库领域的“新潮力量”——从起源到未来的全面解析
    引言曾几何时,关系型数据库(RDBMS)就是数据管理的“老大哥”,一统江湖,所向披靡。然而,随着大数据时代的到来,数据量像火箭般飙升,数据的形态也变得越来越“随性”,传统的关系型数据库开始有点跟不上节奏了。毕竟,当数据像一锅大杂烩一样,什么都有的时候,固定的表结构就显得有点死板了......
  • MySql数据库卸载与安装
    MySql数据库卸载与安装数据库卸载卸载mysql服务打开控制面板-->卸载MySql删除mysql文件夹打开我的电脑-->C盘-->打开隐藏的文件夹ProgramData-->删除MySql文件夹删除注册表windows+r打开运行命令-->regedit(打开注册表)-->HKTY_LOCAL_MACHINE-->SYSTEM只要发现带有ControlSet的文......
  • 关于at32f415 free rtos下使用flash储存数据flash db库在写入数据库操作时,写入次数大
    由于f415的扇区每2k是一块扇区,所以在此处.blk_size=n*1024, //Flash块/扇区大小(因为STM32F2各块大小不均匀,所以擦除粒度为最大块的大小:128K)这个代码中,需要m==2,同理,需要查看你的单片机每个扇区的大小是多少,如果一个扇区的大小是4k,则此处需要填写的是由于f415的扇区每2......
  • 数据库的多表联合查询 后面有命令和格式的总结
    多表联合查询实践创建表:MySQL[company]>createtableemployee6(  emp_idintauto_incrementprimarykeynotnull,  emp_namevarchar(50),  ageint,  dept_idint);QueryOK,0rowsaffected(0.65sec)查看表结构:MySQL[company]>d......
  • 金碟k3 使用py 实现对数据库的增删操作
    金蝶K/3是一款广泛使用的ERP系统,它支持多种数据库,如Oracle、SQLServer和MySQL。为了使用Python对金蝶K/3的数据库进行增删操作,我们需要选择合适的数据库驱动来连接数据库,并使用SQL语句来执行相应的操作。以下是一个示例,展示如何使用Python对金蝶K/3使用的数据库进行增删操......
  • 使用python基于fastapi发布接口(二)-连接mysql数据库查询数据
    上一章在这里操作MySQL数据库使用mysql-connector-python库安装mysql-connector-pythonpipinstallmysql-connector-python代码编写在原来代码基础上添加数据库连接配置fromtypingimportUnionfromfastapiimportFastAPIapp=FastAPI(......
  • 039.CI4框架CodeIgniter,封装Model模型绑定数据库的封装
    01、ModelBase.php代码如下:<?phpnamespaceApp\Models;useCodeIgniter\Database\ConnectionInterface;useCodeIgniter\Model;useCodeIgniter\Validation\ValidationInterface;classModelBaseextendsModel{var$Db;function__construct(Conn......
  • 8.4linux定时任务-环境变量-数据库
    配合SUID本地环境变量提权思路原理:利用sh环境变量替换,使得/tmp/ps得到root权限;ps=sh过程:手写调用文件-编译-复制文件-增加环境变量-执行gccdemon1.c-oshellcp/bin/sh/tmp/psexportPATH=/tmp:$PATH#webshell权限无法设置环境变量./shellid提前本地定时任务(cronta......
  • linux磁盘已满,查看哪个文件占用多
    使用df-h查看磁盘空间占用情况FilesystemSizeUsedAvailUse%Mountedonudev3.9G03.9G0%/devtmpfs799M3.1M796M1%/run/dev/vda199G99G0G100%/tmpfs3.9G03.9G0%/dev/shmtmpfs......