初识向量数据库

背景

现在的数据分为20%的传统结构化数据,80%的非结构化数据
结构化数据:主要单元是数值与符号,数据类型高度抽象且易于组织。基于数值运算与关系代数,可以轻松地对结构化数据进行分析。
非结构化数据:常见的类型包括文本、图像、音频、视频,也包括领域相关的类型,如病毒代码、社交关系、时空数据、化合物结构、点云等。
传统的数据分析方法难以挖掘非结构化数据的信息,但是通过Embedding技术来向量化数据为我们提供了理解非结构化数据的途径。

向量化的数据层具有一系列很好的性质:

(1)Embedding 向量是一种抽象的数据类型,针对抽象的数据类型可以构建统一的代数系统,从而避免非结构化数据丰富的形态所带来的复杂性;
(2)Embedding 向量的物理表示是一种稠密的浮点数向量,这有助于利用现代处理器的 SIMD 能力提升数据分析速度,降低平均算力成本;
(3)Embedding 向量这种信息编码形式,通常比原始的非结构化数据要小得多,占用存储空间更低,并能提供更高的信息传输效率。
(4)Embedding 向量也有与其对应的算子系统,最常用的算子是语义近似匹配。下图给出了一个跨模态语义近似匹配的例子。需要注意的是,图中给出的是匹配的结果。在具体运算过程中,文字和图片都会被映射到同一个 Embedding Space,在这个空间内进行向量化的语义近似分析。
图2 基于多模态神经语言模型的可视化语义嵌入
除此之外,还有语义上的加法操作,如图所示。
在这里插入图片描述
除了上述玩具性的功能,在实际应用场景中,这些算子还可以支持很复杂的查询语句。推荐系统是一个比较典型的例子,它所用到的数据主要是用户行为、内容两大类。通常会对每个内容及用户的浏览偏好进行 embedding,通过对用户偏好与内容间的向量进行语义相似度分析。除此之外,向量数据层上的应用还包括电商、病毒代码检测、数据去重、生物特征验证、化学分子式分析、金融、保险等。

无针对非结构化数据的基础软件栈

传统的数据库、数据分析引擎,主要都是服务于结构化数据。
与传统的数据库系统相比,向量数据库作用于不同的数据层。传统的数据库,如关系数据库、KV 数据库、文本数据库、图像/视频数据库都作用于原始数据层,而 Milvus 则作用于其上的向量化数据层,解决 Embedding 向量的存储与分析问题。

向量数据库的主要特性

基本能力

向量的存储、检索和分析;提供标准的访问接口,具备数据插入查询删除更新的能力

高效支持向量算子

分析引擎中对向量算子的支撑主要在两个层面:
(1)算子类型:如上述的“语义相似性匹配”、“语义上的加法”等算子
(2)对相似性度量的支持:向量算子在底层执行的过程中都需要对“相似性”进行有效度量。这种相似性通常会被量化到空间上数据之间的距离,常见的距离量化方式包括欧式距离、余弦距离、内积距离等。
补充:算子是数学中一个非常重要的概念,它通常指的是一个将数学对象(如数字、函数、矩阵等)映射到另一个数学对象的规则或函数。在数学的不同分支中,算子的定义和用途可能有所不同,但它的核心思想是相同的——算子描述了一种转换或操作。

向量索引能力

相比传统数据库基于 B 树、LSM 树等结构索引,高维向量索引往往计算量更大,属于计算密集型场景。
索引算法层面:多采用聚类、图等技术。
运算层面:以矩阵运算、向量为主。因此,充分挖掘现代处理器的向量加速能力,对于降低向量数据库的算力成本至关重要。

跨部署环境

向量数据库通常会有不同的部署环境,这是由数据科学流程决定的。在前面阶段,数据科学家、算法工程师用系统主要是笔记本或工作站,因为他们关注验证速度和迭代速度。验证好后就需要部署,这就对应着私有集群或云上的大规模部署。因此,需要在不同的部署环境中都能让系统具备良好的表现。

支持混合查询

近年来,随着向量数据库的不断发展,越来越多的新需求涌现出来。其中最常见的一个需求就是其他数据类型和向量混合查询,比如基于标量过滤后再执行最近邻查询,基于全文检索和向量检索相结合的多路召回,以及时空时序数据和向量数据的结合。这要求向量数据库具备更加灵活的扩展能力以及更智能的查询优化,使向量引擎可以与 KV 引擎、文本检索引擎等进行高效协作。
补充
基于标量过滤后再执行最近邻查询
标量过滤是一种基于特定标量的数据过滤方法,例如,我们可以使用欧几里得距离或曼哈顿距离等来过滤数据。我们首先计算数据集中每个数据点到查询点的距离,然后选择距离小于某个阈值的点作为候选邻居。这样,我们可以大大减少数据集的大小,从而提高查询效率。
在标量过滤后,我们再执行最近邻查询。最近邻查询的目标是在过滤后的数据集中找到与查询点最近的邻居。这可以通过计算查询点到过滤后的每个数据点的距离来实现,然后选择距离最小的点作为最近邻居。
基于全文检索和向量检索相结合的多路召回
全文检索是一种基于关键词的检索方法,通过在数据集中查找包含特定关键词的文档或数据来找到相关结果。这种方法适用于处理文本数据,但对于图像、音视频等非结构化数据,全文检索的效果并不理想。
向量检索是一种基于向量表示的检索方法,将非结构化数据转换为向量表示,然后通过计算向量之间的相似度来找到与查询向量最相似的向量。这种方法在处理非结构化数据时具有较好的效果,但对于文本数据,向量检索的准确性可能不如全文检索。
基于全文检索和向量检索相结合的多路召回方法将这两种技术融合在一起,以提高检索效果。具体而言,这种方法首先使用全文检索找到包含查询关键词的文档或数据,然后使用向量检索找到与查询向量最相似的向量。最后,将这两种检索结果进行融合和重排序,以返回最终的候选列表。

云原生

随着非结构化数据规模快速增长,向量数据的体量也在不断增长,千亿规模的高维向量对应着数百 TB 级别的存储。这种存储规模远远超过了单机所能承担的范围,因此,横向扩展能力对于向量数据库而言也就变得非常重要。一个成熟的向量数据库应该满足用户对弹性和部署敏捷性的要求,借助云基础设施降低系统运维的复杂度,提升可观测性。此外,用户对于多租户隔离、数据快照和备份、数据加密、数据可视化等传统数据库能力也提出了越来越高的需求。

向量数据库的系统架构

目前,Milvus 已演进至 2.0 版本,其设计遵循日志即数据、流批一体、无状态化和微服务化的准则,整体架构设计可参见下图。
在这里插入图片描述

日志即数据

在 2.0 版本中没有维护物理上的表,而是通过日志持久化和日志快照来保证数据的可靠性。日志系统作为系统的主干,承担了增量数据持久化和解耦的作用。通过日志的发布-订阅机制,将系统的读、写组件解耦。如图5 所示,整个系统主要由两个角色构成,分别是**“日志序列(Log Sequence)”“日志订阅者(Log Subscriber)”**。其中的“日志序列”记录了所有改变库表状态的操作,“日志订阅者”通过订阅日志序列更新本地数据,以只读副本的方式提供服务。发布-订阅机制的出现也给系统预留了很大的拓展空间,便于 Change data capture(CDC)、全球部署等功能的拓展。
在这里插入图片描述

流批一体化

借助日志实现数据的实时更新,保证数据的实时可达。再将数据量转换成日志快照,通过对日志快照构建向量索引实现更高的查询效率。查询时,通过合并增量数据和历史数据的查询结果,保证用户可以获取完整的数据视图。这种设计较好地满足了实时性和效率的平衡,降低了传统 Lambda 架构下用户维护离/在线两套系统的负担。

无状态化

借助云基础设施和开源存储组件,实现自身组件不需要保证数据的持久化。当前,Milvus 的数据持久化依赖三种存储,分别为元数据存储、消息存储和对象存储。常见的元数据存储如 Etcd、Zookeeper,主要负责元信息的持久化和服务发现、节点管理。消息存储如 Kafka、Pulsar,主要负责增量数据的持久化和数据的发布订阅。对象存储如 S3、Azure Blob、MinIO,主要负责用户日志快照、索引以及一些中间计算结果的存储。

微服务化

严格遵循数据流和控制流分离、读写分离、离线和在线任务分离。整体分为四个层次,分别为接入服务、协调服务、执行服务和存储服务。各个层次相互独立,独立扩展和容灾。
接入层作为系统的门面,主要负责处理客户端链接,进行请求检查和转发。
协调服务作为系统的大脑,负责集群拓扑管理、负载均衡、数据声明和管理。
执行节点作为系统的四肢,负责执行数据更新、查询和索引构建等具体操作。
存储层作为系统的骨骼,主要负责数据本身的持久化和复制。
微服务化的设计保证了可控的复杂度,每一个组件专注于相对单一的功能。通过定义良好的接口清晰地表述服务边界,更细粒度的拆分也有利于更加灵活的扩展和更精确的资源分配。

向量数据库的技术挑战

以往的研究工作主要专注于高效率向量索引结构和查询方法的设计
如今的研究工作开始从系统设计的角度去审视和思考向量查询问题,并逐渐产生了一些针对向量搜索问题系统化的解决方案

针对负载特性的成本-性能优化

由于向量数据的高维特性,其分析过程相对传统数据类型具有更高的存储和计算成本。另一方面,不同用户的向量查询负载特性以及成本-性能偏好往往是不尽相同的。例如,部分用户的数据规模巨大,达到了百亿甚至千亿级别。此类用户通常需要较低成本的数据存储方案,同时能够容忍一定的查询延迟。另外也存在一些用户对查询性能非常敏感,通常要求单条查询的延迟稳定保持在若干毫秒。为了满足不同用户的偏好,向量数据库的核心索引组件需要有能力将索引结构和查询算法与不同类型的存储和计算硬件进行适配。例如,为了降低存储成本,需要考虑将向量数据和索引结构存储在比内存更为廉价介质中(如 NVM 和 SSD)。然而,现有的向量搜索算法几乎都是基于数据可以完全驻留在内存中而设计的。为了尽量避免使用 NVM 或 SSD 带来的性能损失,需要结合搜索算法充分挖掘和利用数据访问局部性,并结合存储介质特性对数据和索引结构的存储方式进行调整(见参考资料6~8)。对于查询性能敏感的用户,目前主流的探索方向为使用 GPU、NPU、FPGA 等专有硬件加速查询过程(见参考资料9)。然而,不同加速硬件和专有芯片的结构设计均不相同,如何结合这些硬件的特性对高效地执行向量索引请求目前仍是一个尚未良好解决的问题。

智能化系统配置与调优

现有的几种主流向量查询算法都是在存储成本、计算性能以及查询准确度之间寻求不同的平衡点,算法的实际表现通常由算法参数和数据特性共同决定。考虑到用户对于向量查询成本和性能要求的差异性,如何针对用户需求以及数据特性为其选择合适的向量查询方法便成为了一个重要问题。然而,由于向量数据的高维特性,使得人工方法通常难以有效分析数据分布特性对查询算法的影响。针对这一问题,学术界和工业界目前主要尝试使用基于机器学习的方法为用户推荐合适的算法配置(见参考资料10)。另一方面,结合机器学习技术的智能向量查询算法设计也是研究的一个热门话题。当前的向量查询算法通常是在假设不知道向量数据特性的情况下进行设计的。这类算法具有较强的通用性,能够应对不同维度数量、不同分布类型的向量数据。相对应的,它们无法根据用户数据的特性进行针对性的索引结构设计,也就无法再进一步挖掘和利用其中的优化空间。如何使用机器学习方法有效地为不同用户数据量身定制索引结构是一个值得探索的重要问题

对丰富查询语义的支持

一方面对向量数据查询语义在不同应用中存在多样性,正逐渐超越传统近邻查询的范畴。另一方面,对于多个向量数据联合搜索,以及向量数据和非向量数据的综合查询需求也在逐渐产生(见参考资料13)。具体而言,对于向量数据查询,向量相似性的评价指标变得更加多样。传统的向量查询通常使用欧式距离、内积以及余弦距离作为向量的相似度指标。随着 AI 技术在各行各业的普及,一些领域特定的向量相似指标,如谷本距离、马氏距离以及用于计算化学分子超结构和子结构的距离指标正逐渐涌现。如何在现有的查询算法中有效地支持这些评价指标或相应地设计新型的检索算法成为了亟待研究的重要问题。另一方面,随着用户业务的日益复杂,应用中对数据的查询通常包含了多个向量数据和非向量数据。例如,在为用户进行内容推荐时,通常需要结合用户个人的兴趣特征、用户的社交关系以及当前的热门话题进行综合性的分析和选择。此类查询通常需要结合多种数据查询方法,甚至通过多个数据处理系统交互完成,如何高效灵活地支持此类查询也是一个具有重要研究价值的问题。

摘自:https://zhuanlan.zhihu.com/p/410538482

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/205534.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 uniapp h5 安卓和iOS开发适配踩坑记录

font-size适配屏幕大小及iOS和安卓状态栏及安全距离的处理 App.vue <script setup lang"ts"> import { onLaunch, onShow, onHide } from "dcloudio/uni-app"; import ./main.scss onLaunch(() > {console.log("App Launch");var wid…

SQL注入-数据库基础/SQL语法

目录 一&#xff0c;数据库概述 1.1 数据库 1.2 了解 ACID 理论 1.3 识别数据库 二&#xff0c;SQL 语法基础 三&#xff0c;SQL语句实例 3.1 SQL基础语句 3.2 SQL高级语句 四&#xff0c;基于SQL注入理解语法/函数 4.1 语法 4.2 函数 五&#xff0c;目录数据库info…

[MySQL-基础]SQL语句

目录 hello! 这里是欧_aita的频道。 今日语录: 只有放弃才是真正的失败。 祝福语&#xff1a;愿你的代码生活充满注释&#xff0c;逻辑清晰&#xff0c;debug之路畅通无阻。 大家可以在评论区畅所欲言&#xff0c;可以指出我的错误&#xff0c;在交流中共同进步。 欢迎关注我的…

【刷题】DFS

DFS 递归&#xff1a; 1.判断是否失败终止 2.判断是否成功终止&#xff0c;如果成功的&#xff0c;记录一个成果 3.遍历各种选择&#xff0c;在这部分可以进行剪枝 4.在每种情况下进行DFS&#xff0c;并进行回退。 199. 二叉树的右视图 给定一个二叉树的 根节点 root&#x…

Linux 常用基本命令

文章目录 7.1 帮助命令7.1.1 man 获得帮助信息7.1.2 help 获得shell内置命令的帮助信息7.1.3 常用快捷键 7.2 文件目录类7.2.1 pwd 显示当前工作目录的绝对路径7.2.2 ls 列出目录的内容7.2.3 cd 切换目录7.2.4 mkdir 创建一个新的目录7.2.5 rmdir 删除一个空的目录7.2.6 touch …

2023 最新 PDF.js 在 Vue3 中的使用

因为自己写业务要定制各种 pdf 预览情况&#xff08;可能&#xff09;&#xff0c;所以采用了 pdf.js 而不是各种第三方封装库&#xff0c;主要还是为了更好的自由度。 一、PDF.js 介绍 官方地址 中文文档 PDF.js 是一个使用 HTML5 构建的便携式文档格式查看器。 pdf.js 是社区…

短 URL 生成器设计:百亿短 URL 怎样做到无冲突?

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 我们先来看看&#xff0c;当高并发遇到海量数据处理时的架构。在社交媒体上&#xff0c;人们经常需要分享一些 URL&#xff0c;但是有些 URL 可能会很长&#xff0c;比如&#xff1a; https://time.geekbang.org/hyb…

分割掩模 VS 掩膜

掩膜 Mask分割掩模 Segmentation Mask总结示例 掩膜 Mask “掩膜” 是指一种用于 标识或遮蔽图像中特定区域 的 图像。 在图像处理中&#xff0c;掩膜通常是一个 二值图像&#xff0c;其中的 像素值为 0 或 1。binary Mask 叫做二元掩膜&#xff0c;如下图所示&#xff1a; 这…

bugku 渗透测试

场景1 查看源代码 场景2 用dirsearch扫描一下看看 ok看到登录的照应了第一个提示 进去看看 不出所料 随便试试admin/admin进去了 在基本设置里面看到falg 场景3 确实是没啥想法了 找到php在线运行 检查网络&#xff0c;我们发现这个php在线运行会写入文件 那我们是不是写…

智能优化算法应用:基于回溯搜索算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于回溯搜索算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于回溯搜索算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.回溯搜索算法4.实验参数设定5.算法结果6.参考…

Vue19 列表过滤

直接上代码 以下代码使用了两种实现方式&#xff0c;监视属性和计算属性 当能用计算属性实现时&#xff0c;推荐使用计算属性 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>列表过滤</title><script type&q…

三十、elasticsearch集群

目录 一、集群的概念 1、节点 2、索引 3、分片和副本 二、集群的架构 三、集群的部署方式 1、单主节点 2、多主节点 3、安全集群 四、搭建ES集群 1、elasticsearch中集群节点有不同的职责划分 2、elasticsearch中的每个节点角色都有自己不同的职责&#xff0c;因此…

git stash save untracked not staged

git stash save untracked not staged 如图 解决方案&#xff1a; git stash save "tag标记信息" --include-untracked或者&#xff1a; git stash save -u "tag标记信息" git stash clear清空本地暂存代码_zhangphil的博客-CSDN博客文章浏览阅读486次。…

如何用CHAT写“科技探索者”视频号运营方案

问CHAT&#xff1a;生成一篇“科技探索者”视频号运营方案&#xff0c;要求内容&#xff1a; &#xff08;1&#xff09;视频号的定位、面向的人群、主要发布哪方面的内容 &#xff08;2&#xff09;视频号的内容设计&#xff08;用什么样的方式来体现、最好有内容创意&#xf…

YOLOv8改进 | 2023 | DWRSeg扩张式残差助力小目标检测 (附修改后的C2f+Bottleneck)

论文地址&#xff1a;官方论文地址 代码地址&#xff1a;该代码目前还未开源&#xff0c;我根据论文内容进行了复现内容在文章末尾。 一、本文介绍 本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv8中的C2f和Bottleneck模块&#xff0c;主要针对的是小目标检测&#xff0c…

基于社区电商的Redis缓存架构-缓存数据库双写、高并发场景下优化

基于社区电商的Redis缓存架构 首先来讲一下 Feed 流的含义&#xff1a; Feed 流指的是当我们进入 APP 之后&#xff0c;APP 要做一个 Feed 行为&#xff0c;即主动的在 APP 内提供各种各样的内容给我们 在电商 APP 首页&#xff0c;不停在首页向下拉&#xff0c;那么每次拉的…

在虚拟机搭建nignx,和使用本地访问nginx的情况

下载nginx yum install nginx 查看nginx是否安装成功。 nginx -v nginx的配置文件的目录和资源的目录。 先到nginx.conf的目录下&#xff0c;在 /etc/nginx/nginx.conf&#xff0c;编辑它。 vi /etc/nginx/nginx.conf 可以看到默认的html的目录。在 /usr/share/nginx/html 下面…

牛客网刷题笔记四 链表节点k个一组翻转

NC50 链表中的节点每k个一组翻转 题目&#xff1a; 思路&#xff1a; 这种题目比较习惯现在草稿本涂涂画画链表处理过程。整体思路是赋值新的链表&#xff0c;用游离指针遍历原始链表进行翻转操作&#xff0c;当游离个数等于k时&#xff0c;就将翻转后的链表接到新的链表后&am…

mybatis参数输入 #{}和${}

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

Linux使用宝塔面板+Discuz+cpolar内网穿透工具搭建可公网访问论坛

Linux宝塔面板搭建Discuz论坛&#xff0c; 并内网穿透实现公网访问 文章目录 Linux宝塔面板搭建Discuz论坛&#xff0c; 并内网穿透实现公网访问前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Di…