当前位置: 首页 > news >正文

黄东旭:“向量数据库”还是“向量搜索插件 + SQL 数据库”?丨我对 2024 年数据库发展趋势的思考

本文由 PingCAP 黄东旭撰写,讨论了数据库技术在 2023 年的快速变革,并对 2024 年的数据库发展趋势进行了预测。文章重点关注了 GenAI 时代对数据库的影响,提出了在数据库选择上的两种路径:“向量数据库”和“向量搜索插件 + SQL 数据库”。文章强调了个性化数据服务的重要性,以及数据库在实时交互和弹性方面所起到的关键作用。

如果我们用一个词来总结 2023 年的数据技术领域,那个词无疑是“急速变革”。我们见证了数据库内核技术与云原生架构的融合演进,AI+Data 的浪潮涌现,以及用户工作负载的深刻转变。GenAI 时代的到来,就像一股不可抗拒的潮流,推动着数据技术的每一朵浪花,朝着更智能化、更灵活化的巨浪之海奔流。

2023 年,我们的眼前充满了夺目的 AI Demo 与炫技,你追我赶。转眼间,当我 们步入 2024 年,这个年份将因为 “AI 在从 Demo 到真实场景落地”的急剧转变而被人们记住。随着开源大模型成本的加速下降,企业和开发者对数据的关注也急剧上升,对数据的关注度将很快取代对模型的关注度。有预测认为,在 2023 年,用户愿意在 AI 模型上投入 80% 的预算,然而在未来这一两年里,随着模型成本的降低,这一比重可能会逆转,用户将更多的投资(甚至大于 80%)倾向于数据,数据处理和分析能力变得更加重要。

毫无疑问,AI 将会对数据处理提出非常多新的诉求,数据技术领域也会面临着多重挑战与机遇,AI 正在重塑数据技术的全新生态。我们不禁要问:在 GenAI 的大潮中,选择 “向量数据库”还是“以 SQL 数据库作为核心,添加向量搜索插件”?数据库如何应对 Gen AI 对数据库扩展性和实时交互的诉求?浪涌般海量数据的实时查询会不会带来巨大的成本压力?AI 带来的自然交互方式催生怎样的开发者体验 ?这些问题将在本文中一一解答

/ 预测一 /

“向量数据库”还是“向量搜索插件 + SQL 数据库”?这是一个答案很明确的问题。

如果说过去 CRUD 应用是对数据库访问的静态封装,那么随着 GenAI 的普及,尤其是 Chatbot 或 Agent 的产品形态,对数据的使用会是更加灵活和动态的。过去,集中的数据存储和应用是因为技术的局限,很难为个人提供个性化的服务,尽管现代的 SaaS 其实很希望往这个方向发展,但是为每个用户都提供个性化的体验对算力和开发的挑战太高,而 GenAI 和 LLM 将提供个性化服务的成本降得很低(可能就是几段 Prompt),以至于对于数据库而言,带来几个变化:

○ 个人(或一个组织)产生的数据价值会变得越来越高,但这类数据通常不会很大

○ GenAI 会使用更加动态和灵活的方式直接访问数据,这样效率最高

○ 对数据的访问从边缘发起(从 Agent 或者 GenAI 直接发起)

一个很好的例子是 GPTs, GPTs 支持通过的自定义的 Prompt 和用户提供的 RESTful API 来创建自己的 ChatGPT,基础的 ChatGPT 会在它认为需要的时候以灵活的方式调用你给定的 Action。这个调用发生方式和参数是后端的 Action 提供者无法预料的。而且可以预料的是很快 GPTs 将会提供标记个人身份信息的机制,这样对于 Action 的提供者来说,相当于后端的数据库有了最重要的索引:UserID,剩下的就很好理解了。

这里你可能会提出质疑,RAG 不是标准的做法吗?但现有的 RAG 构建的方式几乎都是静态的,而知识应该是可以实时被更新的,这里不得不提到向量数据库。

对向量的支持,在去年是数据库迭代的一个热门方向,产生了很多专门的向量数据库, 但是我认为,更丰富的数据访问接口,使得向量搜索成为标配,然而 SQL 仍然是基石。向量搜索并不值得专门使用一个独立的数据库来支持,更应该是现有的数据库中的一个功能,就像 :

Plaintext
Rust   INSERT INTO tbl (user_id, vec, ...) VALUES (xxx, [f32, f32, 
f32 ...], ...);   SELECT * FROM tbl WHERE user_id = xxx and 
vector_search([f32,f32,f32,f32 ...])

类似的访问可能是更符合开发者直觉的。

而 关系型数据库天然支持插入和更新 ,另外配合向量索引的搜索能力,便可以将 RAG 变成一个可以实时更新实时查找的正反馈循环(利用 LLM 引入进行二次的 Summary ,然后将更新的 Index 储存在 DB 中)。更重要的是, 关系型数据库的引入消除了向量数据库带来的数据孤岛的问题 ,当你可以将向量索引筛出来的数据关联(JOIN)到同一个 DB 中其他的数据的时候,灵活性带来的价值就得以显现。

另一个好处是,Serverless 的产品形态,同样也将数据的所有权归还给用户本人,大家思考一下,在我们熟知的 Web2 时代,我们的数据是隐藏在一个个互联网公司的服务背后的黑箱,我们没有办法直接访问;而在 GenAI 的应用场景下,数据的交互变成一个三角的关系,用户 - 数据 (RAG) - GenAI。很有意思的是,这个正是 Web3 的理想之一,GenAI 的普及很可能顺手也将 Web3 想实现的将数据的所有权交还给用户的理想,这在 Web2 时代是不可能实现的,这其实是一种技术理想的回归。

当然,我相信在未来 RAG 会成为数据库的很重要的一种新应用场景,在这种场景中 Serverless 形态提供的云数据库服务会变成标准化的。

/ 预测二 /

由高价值数据驱动的应用成为 GenAI 应用的主流,弹性与实时交互成为数据库能力的基石。

在预测一里我们提到, GenAI 时代的应用要求知识和数据是可以被实时更新的,这对数据库的弹性以及实时交互提出了非常直接的需求。

数据库的可扩展性一直是过去十年间,业界关注的重点之一。根据我们的观察,大多数单一在线业务,100TB 已经是很大规模,而这个规模下的一般 OLTP 业务,已经可以被市场上很多系统自信的解决。

但这些数据库大多是 Shared Nothing 的系统,Shared nothing 的系统通常会有一个假设:在集群中的节点是对等的,只有这样数据和 Workload 才能均匀的分散在各个节点上。这个假设对于海量数据 + 访问模式均匀的场景没有问题,但是仍然 有很多的业务具有明显的冷热特征, 尤其是在 GenAI 带来的数据访问方式越来越动态和灵活的 2024 年及以后 。

我们最经常处理的数据库问题之一就是局部热点。如果数据访问倾斜是一个业务的天然属性的话,对等的假设就不再是合理的,更合理的方式是将更好的硬件资源倾斜给热点的数据,而冷数据库使用更廉价的存储,例如,TiDB 从一开始将存储节点(TiKV)/ 计算节点(TiDB)/ 元信息(PD)分离,以及在后来 TiDB 5.0 中引入自定义 Placement Rule 让用户能够尽可能决定数据摆放策略,就是为了尽可能弱化节点对等假设。

但是更终极的解决办法在云端,在基本的扩展性问题得到解决后,人们开始追求更高的资源利用效率,在这个阶段,对于 OLTP 业务来说,我想可能更好的评价标准是 Cost Per Request。因为在云端,计算和存储的成本差别是巨大的,对于冷数据来说,如果没有 Traffic,你甚至可以认为成本几乎为 0,但是计算却是昂贵的,而在线服务不可避免的需要计算(CPU 资源),所以 高效利用计算资源,云提供弹性将成为关键 。

另外,请不要误解 ,弹性并不意味着便宜,on-demand( 随需提供的 )的资源在云上通常比 provisioned(预分配)的资源更贵,持续的 burst 一定是不划算的,这种时候使用预留资源更合适,burst 那部分的成本是用户为不确定性支付的费用。仔细思考这个过程,这可能会是未来云上数据库的一种盈利模式,

与弹性同样重要的需求就是实时交互 。GenAI 时代的应用需要数据库不仅要有强大的数据处理能力,还需要有高效的实时数据广播和同步机制。这不只是让数据能够实时更新,而是确保数据流能够实时流动,让数据库能即时捕捉到每一次交互,每一个查询,确保每一个决策都是基于最新、最准确的信息。(就是用户愿意为更高价值的实时交互付钱,想想股票实时交易和直播电商的场景就知道了)

于是整个系统——从数据的产生到处理、再到存储和检索——都必须要在实时的框架下工作,能够在毫秒级别做出实时响应,这也需要数据库能实时在事务处理(OLTP)和分析处理(OLAP)之间无缝同步。这样的实时交互能力,将会是现代数据库区别于传统数据库的决定性因素之一。

/ 预测三 /

成本分析已经成为所有人关心的问题,在云数据库的可观测性中成为独立新视角。

今天我还想谈的一点是云数据库的可观测性,尤其是它是否能让我的云消费更透明。对于数据库云服务来说,可观测性的要求会更高,因为对于开发者来说,服务商提供的 Dashboard 几乎是唯一的诊断手段。介绍可观测性的文章也很多,相似的部分因为篇幅关系我也不打算说太多。

与传统的可观测性不一样的是: 在云上,一切 Workload 都会成为客户的帐单的一部分 。对于用户来说一个新的问题便是:为什么我的帐单看起来是这样?我需要做什么才能让我的帐单更便宜?账单的可解释性做得越好,用户体验也就越好。

但是如果计费测量的粒度过细,也会影响产品本身的性能以及增加实现的成本。这里面需要平衡。但可以确定的是,在思考可观测性产品的方向上,成本分析可以作为一个独立的新视角。

成本分析可以帮助用户发现系统运行中的潜在问题,并采取措施予以优化。例如,如果用户观测到某个数据库实例的 CPU 使用率较低,但成本却很高,就可以考虑将该实例的规格调整为更低的级别。

AWS 今年发布的 Cost and Usage Dashboard 和 Reinvent 上 Amazon CTO Dr. Werner 的演讲专注于成本的架构艺术也同样可以看到这个趋势。他提出了 “俭约架构” 七大法则来在云的环境中打造更加高效、可持续的系统,为我们提供了一个系统性的指导框架。

/ 预测四 /

当 GenAI 时代的各种应用和工具变得越来越轻巧,开发者体验将成为现代数据库设计的核心目标之一。

数据库平台化不仅仅是漂亮的 Web 管控界面以及一些花哨的功能堆砌。我很喜欢 PlanetScale 的 CEO Sam Lambert 在他的个人 Blog 里面关 Develop Experience 的描述他引用了乔布斯的一句话“Great art stretches taste, it doesn’t follow tastes( 伟大的艺术拓展审美边界,而不是刻意迎合。)”。

好用的工具之所以好用,是因为其中是饱含了设计者的巧思和品味,而且这个设计者也必须是重度的使用者,这样人们才能体会到那些细微的快乐与痛苦,但是又不至于沉浸其中使其盲目 ,其实这对负责开发者体验的产品经理来说是极高的要求。

数据库管理工具作为一种频率不算高频、但每次使用都很严肃的工具,在 AI 和云的时代,我认为有一些与体验紧密相关的设计原则是需要遵守的:

API First, 数据库平台应该提供稳定的 / 前向兼容的 API,一切在管控平台里能干的事情,API 都要能做到,最好你的管控平台是基于你的 API 构造的。这为你提供一个功能齐备的好用的 CLI Tool 也是关键的必要条件。

使用统一的认证体系,在设计阶段将管控的认证和用户体系与数据库内部的认证体系打通,传统的数据库基于用户名和密码的权限体系在云的时代是不够的。这为了后续与云的 IAM 和 Secret 管理体系对接打下基础。

对不同的功能构建不同的 / 稳定的小工具 (Do one thing, do things well),但是通过一个统一的 CLI 入口和语义系统进行调用。比较好的例子是 rustup, 甚至 git 也是个很好的例子。

稍微总结一下,2024 年,数据和数据库技术仍然处于巨大的变革期,谁也没办法预测未来,因为我们就身处这么一个不确定性巨大的时代。但好的一面是,创新仍然层出不穷。我今天预测的,很可能过几个月就会被我自己全部推翻,也是很正常的事情,如果能给当下的你有所启发,那就够了。

相关文章:

黄东旭:“向量数据库”还是“向量搜索插件 + SQL 数据库”?丨我对 2024 年数据库发展趋势的思考

本文由 PingCAP 黄东旭撰写,讨论了数据库技术在 2023 年的快速变革,并对 2024 年的数据库发展趋势进行了预测。文章重点关注了 GenAI 时代对数据库的影响,提出了在数据库选择上的两种路径:“向量数据库”和“向量搜索插件 SQL 数…...

Spark编程实验五:Spark Structured Streaming编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、Syslog介绍 2、通过Socket传送Syslog到Spark 3、Syslog日志拆分为DateFrame 4、对Syslog进行查询 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握Structured Streaming的基本编程方法; 2、掌握…...

【已解决】引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

这种问题产生一般都会手足无措,包括笔者,但是不要慌,这种问题一般都是内存泄漏引起的。例如读者要访问一个已经被析构或者释放的变量,当然访问不了,导致存在问题。这时候读者应该从哪里产生内存泄漏这方面进行考虑&…...

Python Flask高级编程之RESTFul API前后端分离(学习笔记)

Flask-RESTful是一个强大的Python库,用于构建RESTful APIs。它建立在Flask框架之上,提供了一套简单易用的工具,可以帮助你快速地创建API接口。Flask-RESTful遵循REST原则,支持常见的HTTP请求方法,如GET、POST、PUT和DE…...

Windows如何打开投影到此电脑

1.首先点开设置 找到系统 点击投影到此电脑,如果这3行都显示灰色说明没有开启。 2.如何开启投影到此电脑 ①回到设置,点击应用 ②点击可选应用 ③ 安装无线显示器 投影设置可以和我一样...

【BUG】段错误

1. 问题 8核工程,核4在运行了20分钟以上,发生了段错误。 [C66xx_4] A00x53 A10x53 A20x4 A30x167e A40x1600 A50x850e2e A60x845097 A70xbad9f5e0 A80x0 A90x33 A100x53535353 A110x0 A120x0 A130x0 A140x0 A150x0 A160x36312e35 A170x20 A180x844df0 …...

深入理解指针(3)

目录 一、 字符指针变量二、 数组指针变量1.数组指针变量是什么?2.数组指针变量怎么初始化? 三、 二维数组传参的本质四、 函数指针变量1. 函数指针变量的创建2.函数指针变量的使用3.typedef关键字 五、 函数指针数组六、 转移表 一、 字符指针变量 在指针的类型中…...

ssm在线学习平台-计算机毕业设计源码09650

目 录 摘要 1 绪论 1.1 选题背景及意义 1.2国内外现状分析 1.3论文结构与章节安排 2 在线学习平台系统分析 2.1 可行性分析 2.2 系统业务流程分析 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 在线学习平台总体设计 …...

【Linux 内核源码分析】内存映射(mmap)机制原理

内存映射(mmap)是 Linux 内核的一个重要机制,它为程序提供了一种将文件内容直接映射到进程虚拟地址空间的方式。同时内存映射也是虚拟内存管理和文件 IO 的重要组成部分。 在 Linux 中,虚拟内存管理是基于内存映射来实现的。在调用 mmap 函数时&#xf…...

贪心算法之合并区间

“任世界多宽广,停泊在这港口~” 区间问题,涉及到最多的就是 取交集 和 并集的概念。我们使用C排序算法后,其默认规则就是按照 “左排序”进行的。因而,我们实质上注意的是每一个区间的 右端点,根据题目要求&#xff…...

Eclipse - Colors and Fonts

Eclipse - Colors and Fonts References 编码最好使用等宽字体,Ubuntu 下自带的 Ubuntu Mono 可以使用。更换字体时看到名字里面带有 Mono 的基本都是等宽字体。 Window -> Preferences -> General -> Appearance -> Colors and Fonts -> C/C ->…...

java 数据结构LinkedList类

目录 什么是LinkedList 链表的概念及结构 链表的结构 无头单向非循环链表 addFirst方法(头插法) addLast方法(尾插法) addIndex方法 contains方法 removeAllKey方法 size和clear方法 链表oj题 无头双向非循环链表 ad…...

第五次作业(防御安全)

需求: 1.办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP 不能用来转换) 2.分公司设备可以通过总公司的移动链路和电信链路访问到DMZ区的http服务器 3.分公司内部的客户端可以通过公网地址访问到内部的服务…...

阿里云香港轻量应用服务器是什么线路?

阿里云香港轻量应用服务器是什么线路?不是cn2。 阿里云香港轻量服务器是cn2吗?香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器,通过mtr traceroute测试了一下,最后一跳是202.97开头的ip,1…...

C# Winform .net6自绘的圆形进度条

using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;namespace Net6_GeneralUiWinFrm {public class CircularProgressBar : Control{private int progress 0;private int borderWidth 20; // 增加的边框宽度public int Progr…...

Git基本操作(超详细)

文章目录 创建Git本地仓库配置Git配置命令查看是否配置成功重置配置 工作区、暂存区、版本库添加文件--场景一概述实例操作 查看.git文件添加文件--场景二修改文件版本回退撤销修改情况⼀:对于工作区的代码,还没有 add情况⼆:已经 add &#…...

【AGI视频】Sora的奇幻之旅:未来影视创作的无限可能

在五年后的未来,科技的发展为影视创作带来了翻天覆地的变化。其中,Sora视频生成软件成为了行业的翘楚,引领着全新的创作潮流。Sora基于先进的Transformer架构,将AI与人类的创造力完美结合,为观众带来了前所未有的视听盛…...

Docker部署nginx

搜索镜像 docker search nginx 下载拉取nginx镜像 docker pull nginx 查看镜像 docker images 启动容器 docker run -d --name nginx01 -p 3344:80 nginx 外部端口需要在服务器安全组中设置,使用docker镜像nginx以后台模式启动一个容器,并将容器…...

C++Qt——自定义信号与槽

自定义信号与槽 自定义信号与槽是实现对象间通信的一种机制,比如按钮和窗口间的通信。 一、定义信号 Signal关键字声明的类成员函数。不需要实现,只需要声明。 signals:void mySignals();//定义信号,不用实现二、定义槽 可以使任何普通成员函数&…...

提高项目的性能和响应速度的方法

目录 引言 一、代码优化 二、数据库优化 三、缓存技术: 四、异步处理 1. 将耗时的操作改为异步处理 1.1 文件上传 1.2 邮件发送 2. 使用消息队列实现异步处理 2.1 配置消息队列 2.2 发送消息 2.3 接收消息并处理 五、负载均衡和集群 1. 负载均衡 1.1 …...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...