AI与传统数据库 - ChatGPT风过之后 | 从Duet AI说开来
作者:Ni Demai,是NineData数据库产品专家,曾任阿里云数据库国际产品总负责人,华为高斯 GaussDB 创始团队核心架构师,IBM Db2 资深研发工程师。 Demai 专注 Cloud-Native database 架构设计,分析型 MPP,企业数据库开发及生态,并且积极参与开源社区建立和发展。
OpenAI的突破震撼整个市场已经半年有余,在初期的震惊之后,整个业绩膝跳反应,全体搭车。训练大模型有之,抓紧囤货有之,直接改BP的最多。
靠数据库吃饭多年的我却纠结在思考漩涡中。N多年前的项目申请的PPT上就写过AI-powered Optimizer [1],而且是深思熟虑过的三步走(这样三年都有经费了)。后来慢慢的AI for DB或DB for AI陆续出现了,我已经记不清是在哪个东家的规划策略中了,大概是都有的。AI for DB,比如NLP to SQL(现在太多了 [2]), ML-Based buffet pool 调优,当然还有万变不离其宗的优化器;DB for AL: 就是为在数据库里提供ML算子,或者直接脱离狭义的关系数据库,赶上embeded DB (即向量数据库)的风头 [3],后者继续图数据库 [4] 上深耕。
渴望成为风口的千百中的一只,思路却还停留在自己的茧房里。上面的东西在过去六七年场景中辩论过无数次,都有些东西,但做下来又都感觉不踏实。比如说,NLP2SQL(链接:https://github.com/nidmgh/techTrend/blob/main/NLP2SQL.py.), 这是笔者花了两个小时写的人生第一个(也许是第二次?)python code,其中有半个小时在学习如何在浏览器上开一个可互动的对话框了。一个普通程序员两个小时的商业价值是很难飞起来的,即使在风口。
想了几个月,没有答案,不妨碍去探索。三人行必有我师,俗称“作业借我抄抄”。今天借Google的AI collaborator 工具 DuetAI [5] 谈谈自己的想法。
1. NLP2SQL之后呢?
自然语言到SQL面向的客户,期望解决的问题很明显:客户不用学习写SQL了。之后呢?真的不需要懂SQL了吗? Google在讲这个问题的时候引用了一个化妆品L’Oréal的架构师的一段话。笔者个人也在新加坡拜访过SEPHORA的亚洲总部。换位思考一下,有几位读者能说清楚口红的颜色。既然说不清看不懂,那么如果销售员推荐一个YSL小金条1966 [6],在我脑海里比量子力学还难了。
同样的道理,通过自然语言生成了一个SQL,且不说性能调优问题。最终用户能够判断该查询的准确性,如何解读结果?自然语言到SQL并没有真正解决这个问题,而是需要把SQL Query的结果再解析出来,生成报告用户可以理解内容。AIGC完成自闭环。Duet AI in Google Cloud - data analysis and visualization(链接:https://www.youtube.com/watch?v=gtehwj1G4tU), 便是Google Next 23 keynote中的一个例子。NLP+BigQuery+Looker, 自然语言为输入,PPT为输出。
注意,在完成PPT向领导汇报这一个实际工作的同时,还解决了一个关键性的技术性问题。就是,让我们的客户真正的能够用其领域知识理解输出的结果。图表报告的正确性与否,是与客户的专业知识相互作用的,她/他的专业经验和日常感觉判断。因为只有这些客户才了解的业务的实际情况,而不是冷冰冰的数据库查询结果。上帝的归上帝,凯撒的归凯撒;SQL归数据库码农,口红色号归化妆专业人士,大家各司其职,贡献专业知识。
- 技术路径:NPL2SQL + Data Warehouse + Marp [7]
2. 数据库迁移:百里之行半九十
数据库迁移是几十年的老话题。其中数据库兼容性,数据迁移,Schema转换,应用重写(COBOL万岁 ),祥林嫂都觉得烦了。可问题和业务都还在,占有每一个CIO老总预算的40%(抱歉,记不得出处了)。其中简单的东西有各种工具都解决了,不管是数据库内核的兼容性 [8],还是转换工具的革新更新换代,已经把门槛推到了95%。这个数据来自笔者的小学一年级加减法:4年前在吉隆坡一角的会议室里的我给客户业务的分析结果。那是一个帮助马来西亚的电商从Oracle RAC迁移到PolarDB的例子,我们最后的困难也在这5%。从鉴于对客户信息的尊重,这里只分享公开的材料“Goodbye Oracle! Exclusive Insights into PrestoMall’s Transition to Alibaba Cloud”(链接:https://alibaba-cloud.medium.com/goodbye-oracle-exclusive-insights-into-prestomalls-transition-to-alibaba-cloud-d24b05058777), 从Oracle到PG需要手工修改80%的code,采用当时的自动化工具(programming language and schema conversion) 可以减少到10% , 使用当时的PolarDB兼容O的版本,减少到5%。、
对的,客户CTO和我也都知道,数据库迁移的最后的5%是多么困难的一座山。很幸运,我们成功了。With good tools and many man-months power。这5%便是AIGC可以带来的创新点。
Duet AI 作为数据库开发者的辅助工具,可以再推进2~3%。除了可以比较把老朽的CPP [9]转化成代表新潮流GO外,它还可以把自适应的原始端的数据库API转化成目标端的数据库API,当然目标端是GCP自己的云数据库AlloyDB了。比较有趣的魔鬼在于细节,这里并不是革命,而一个个螺丝钉拧上去的革新。Duet AI in Google Cloud - database management (链接:https://www.youtube.com/watch?v=u6489QehgdQ)展示从Oracle到 AlloyDB(PG为根基的云数据库) ,其中自动标识localtimestamp() 到 clock_timestamp(),并且举一反十的全局修改。这是一个把半天工作量削减到30分钟的小动作(销售人员会说削减到1分钟... 我不是个好销售)。
这点小改进并不专属于数据库迁移,但在这个场景下--数据库迁移的应用改造中,cost/return收效最好。因为迁移的技术员与原应用的开发工程师,在中间可能已经隔了n多个程序员了,客户技术人员即没有兴趣,也没有能力去理解原始程序。而原始应用中一定会有多年积攒的重复性的逻辑片段,通过机器学习来去举一反N才是程序猿copy/paste的最好朋友。
- 实现路径:existing data replication and schema conversation tool + drivers for cloud databases + GitHub co-pilot(copilot是技术关键。需要针对数据库应用定制)
3. DBA对于数据库报警的漠不关心
刚刚接触云客户业务的时候,去约一位资深技术Lead。他说好啊,刚好晚上他值班,所以有空:“咱们晚上9点吧,赛银国际的一个酒吧,还是不错的”。我以前也做过值班经理工作,每次值班都如临大敌,非常紧张。因为支持的是大客户,“运气好”的时候,可以上新闻头版的。
这位是很资深的老员工,深耕集团内外技术支持多年。落座之后,先叫了杯酒,然后提到一般两人轮换值一天,他更愿意自己扛24小时。这样子只耽误一天时间。聊天的两个小时过程中,他的手机时刻都在震动着。他也不得不时不时瞟一眼报警,偶然中断一下我们兴致勃勃的八卦,去翻一下详细的信息。两年后,疫情期间,我遇到另一位正在值班的同事。酒吧好像已经关了(不知道是否是暂时的),但他值班的方式和流程没有变化。也许是我的心理作用,唯一变的就是报警更频繁了。
对比我当年的值班,这位老兄的确是处事不惊,泰然自若。可另一方面我每个班能有两个电话就已经是非常繁忙的,因为客户的DBA是我们最前沿的保护,他手里的脚本和自身的经验保证了报警的高质量,而不是直接推到我的手机上。而这位老兄手机上的几千次的所谓的报警为什么会发生呢?客户将IT服务通过云托管的方式“外包”给了云厂商。云的技术人员对于客户的业务其实是不了解的,无法真正的的判断报警的分级和处理的方法。所以常年来(为了免责也是一大原因)报警数量有增无减,造成了99.x%无用的信息。但消耗了大量的人工力量,系统报警的严重污染,用所谓的完整性,消耗了实际的服务效率。那位资深老哥值班的过程中,无法做有意义的事情,即不能为公司工作,也不能陪伴家人。也许同我一起八卦是最高效的产出了。
Google提出了Duet AI in Google Cloud - troubleshooting issues(链接:https://www.youtube.com/watch?v=MBAuTQdtZ0o)。其实这不是什么新东西。Snowflake的成功,就很大程度上归功于其Service with Scalability。Snowflake的运维每天生成几十T的日志数据,而且业务持续稳定增长。之所以能够跨越增服(业务)不增人(工程师)的创业公司门槛,便是有效的完成了日志自动化。在这个门槛上跌倒的的公司很多,包括现在的国内主力云服务商。
之前对于数据库系统的一些排错的方式,非常依赖于比较有前瞻性的SQL Error Message的设计。比如MySQL 8.0 Error Message Reference(链接:https://downloads.mysql.com/docs/mysql-errors-8.0-en.a4.pdf)有786页,体现了30年的积累。现在AI大模型帮助可以更快的总结系统错误,分析系统重大问题之前的N个小时的状态,尤其是当时没有注意到的报警(帮助我那位值班的老哥,从无效的报警中解脱出来)。这便是新技术,面对旧场景的革新。
技术路径:时序数据库(一般的数仓也够了)+ 针对数据库日志的大模型训练 + 反馈机制 [10]。
4. 写个尾巴
AI for DB和DB for AI上面两个方向当然都有各自的故事可以讲,我也都去讲过。个人以为数据库内核已经足够成熟,已经人力优化多年,现在的AL水平是无法提供实际提高的(个人并不反对这方面的学术工作或者大厂的research lab)。内核的提高还有待观望,与日常IT工作相关的DMaaS反而可以先发,利用今天的AI技术产生革命性的东西。上面的三个突破点的技术路线是可以立刻发力的。
The above ideas were formed at Bodega Bay.
参考
- 真正的idea来源于团队的优化器专家,现在是某top国产数据库的head of Engineering。我只是前台翻PPT的。
- 《当LLM遇到Database:阿里达摩院联合HKU推出Text-to-SQL新基准》(阿里:https://developer.aliyun.com/article/1262738);TiDB Chat2Query(https://www.pingcap.com/chat2query-an-innovative-ai-powered-sql-generator-for-faster-insights/); 《数据库开发工具界的 ChatGPT 来了》(https://www.bilibili.com/video/BV1XT411r7HQ/;NineData:基于 AI(GPT) 的 SQL 优化,不好意思夹带私货)
- 阿里最近宣传的PGVector和开源的chroma(https://github.com/chroma-core/chroma)
- NebulaGraph and TigerGraph
- 部分信息来源于:https://cloud.google.com/blog/products/ai-machine-learning/duet-ai-in-google-cloud-preview。Duet AI号称可以干很多事情。鉴于笔者的知识范围,只探究数据库/数据处理/云数据相关的内容。本文并不重点在google的Duet AI,而是借助其服务场景谈谈自身的思考。建议大家参阅原文和自己试试Duet AI,毕竟“原始材料”要靠谱的多。
- 据说是10支大牌经典口红色号,反正我不懂。https://www.zhihu.com/tardis/zm/art/565109678?source_id=1003
- a Markdown to PPT tool. 笔者在过去10个月一直使用它。挺好玩,还不成熟。
- PG生态的EDB(aka Enterprise DB), 国内的PolarDB-O,Oceanbase-O
- 坐在mainframe里的COBOL捋着胡子说:你过来呀?
- 华人开发的时序数据库有TDEngine和Timeplus; Meta开源的Llama大家肯定听说过;反馈机制需要专门设计,暂时没有方案。
相关文章:
AI与传统数据库 - ChatGPT风过之后 | 从Duet AI说开来
作者:Ni Demai,是NineData数据库产品专家,曾任阿里云数据库国际产品总负责人,华为高斯 GaussDB 创始团队核心架构师,IBM Db2 资深研发工程师。 Demai 专注 Cloud-Native database 架构设计,分析型 MPP&…...
L1-032 Left-pad C++解法
一、题目再现 根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个…...

Python 用列表实现模拟手机通讯录(简易版)
"""列表实现好友管理系统知识点:1、列表存储信息2、列表增删改查3、嵌套循环4、字符串分割和拼接(重点)5、列表索引"""# 暂存好友信息(程序结束数据删除) friend_info list()input_buf…...

macOS使用官方安装包安装python
新手程序员可能想知道如何在 Mac 上正确安装 Python,这里介绍在 macOS 上安装 Python 的方法。 操作步骤 1.从 Python 官方网站 (python.org) 下载最新的 Python 版本. 单击 macOS 链接并选择最新的 Python 版本。 2.下载完成后,双击包开始安装Python…...

如何重装Windows Mirosoft Store
重装Windows Mirosoft Store 如何重装Windows Mirosoft Store呢?如何下载Windows Mirosoft Store呢?Windows Mirosoft Store不见了咋办?Windows 自带软件不见了咋办等等?写在前面 1.文件准备2.安装 如何重装Windows Mirosoft Stor…...
软考高级系统架构设计师系列论文真题七:基于构件的软件开发
软考高级系统架构设计师系列论文真题七:基于构件的软件开发 一、基于构件的软件开发二、找准核心论点三、理论素材准备四、精品范文赏析1.摘要2.正文3.总结软考高级系统架构设计师系列论文之:百篇软考高级架构设计师论文范文软考高级系统架构设计师系列之:论文题目类型、论文…...

git rebase 修改中间的commit
0. 前言 今天在移植最新版本 kfence 功能的时候,一共需要移植大概40多个 patch,中间有很多patch 存在冲突,需要手动修改后才能合并。当所有的patch 都合并完成进行编译的时候,发现其中一个 patch 手动合并出了个错误。 假如共有…...

登录业务实现 - token登录鉴权
登录业务实现: 登录成功/失败实现 -> pinia管理用户数据及数据持久化 -> 不同登录状态的模板适配 -> 请求拦截器携带token(登录鉴权) -> 退出登录实现 -> token失效(401响应拦截) 1. 登录成…...

内存对齐--面试常问问题和笔试常考问题
1.内存对齐的意义 C 内存对齐的主要意义可以简练概括为以下几点: 提高访问效率:内存对齐可以使数据在内存中以更加紧凑的方式存储,从而提高了数据的访问效率。处理器通常能够更快地访问内存中对齐的数据,而不需要额外的字节偏移计…...
贪心算法-会议室问题
1、题目描述 一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目。现在给你两个长度一样的数组,starts数组代码每个会议开始的时间,ends数组代表每个会议结束的时间。 在给你一个当前时间,请你求出当日可以利用会议室宣讲的…...

单日 5000 亿行 / 900G 数据接入,TDengine 3.0 在中国地震台网中心的大型应用
小T导读:为满足地震预警数据存储、检索和处理的建设与集成需求,以及响应国家国产软件自主可控的号召,中国地震台网中心决定选用国产数据库 TDengine 来存储和处理地震波形数据。本文将针对 TDengine 3.0 在地震领域的应用展开详细讲解。 关于…...
【VIM系列】cscope命令
cscope...

Vue的自定义事件(Custom Events):实现组件间通信的强大工具
Vue的自定义事件(Custom Events):实现组件间通信的强大工具 Vue.js是一款流行的JavaScript框架,用于构建交互式的Web应用程序。在Vue中,组件是构建应用程序的基本单元,它们之间的通信对于构建复杂的应用非…...
简易实现通讯录(1.0)
前言 我们还是像以前一样,分为三个文件来书写,分别是contact.h,contact.c,test.c 分别用来声明函数,实现函数和测试函数功能,现在就让我们开始吧. 1.基本逻辑 首先我们定义通讯录里的数据,我们定义为结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_…...
CSS笔记——触发式动画Transition、主动式动画Animation、Transfrom 动画、CSS 3D 动画、阴影和滤镜样式
CSS动画 一、触发式动画Transition transition过渡动画,一般配合伪类使用 属性值: transition-duration: 指定过渡效果的持续时间,以秒或毫秒为单位。 transition-timing-function: 指定过渡效果的时间函数ÿ…...

软件测试之Web安全测试详解
前言 随着互联网时代的蓬勃发展,基于Web环境下的应用系统、应用软件也得到了越来越广泛的使用。 目前,很多企业的业务发展都依赖于互联网,比如,网上银行、网络购物、网络游戏等。但,由于很多恶意攻击者想通过截获他人…...
MYSQL binlog
为了防止 binlog 文件过大导致无可用的磁盘空间,MySQL 提供了一个系统变量用来配置过期时间。 MySQL5.7 :expire_logs_days,精确度为天; MySQL8.0 :binlog_expire_logs_seconds,精确度为秒。 SET GLOBAL bi…...

Web 基础概念
自己总结的web前端知识体系大全 基础概念 DOM DOM是什么意思-前端入门_dom是什么意思啊_猿说前端的博客-CSDN博客 DOM的含义: DOM称为文件对象模型(DocumentObjectModel,简称DOM),是W3C组织推荐的处理可扩展置标语言的…...

谈谈最近招人的感受!
最近折腾新的项目,面试了很多实习生小伙伴,我说说我的一些「面试」感受, 虽然是一个老生常谈的话题,但是依然提一下。 准时很重要:提前一点时间,踩个点,别迟到,面试的过程中由于每个…...
【日常业务开发】Java调用第三方http接口的常用方式
【日常业务开发】Java调用第三方http接口的常用方式 概述Java调用第三方http接口的方式通过JDK网络类Java.net.HttpURLConnection通过apache common封装好的HttpClient通过Apache封装好的CloseableHttpClient通过OkHttp通过Spring的RestTemplate通过hutool的HttpUtil 总结 概述…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...