Are we ready for learned cardinality estimation?
Are we ready for learned Cardinality Estimation
摘要
文章包括三大部分:
- 对于一个静态的数据库,本文将五种基于学习的基数估计方法与九中传统的基数估计方法在四个现实世界的数据集和统一的工作负载上进行了比较。结果说明基于学习的基数估计方法比传统方法更加准确,但也需要更多训练和推理的开销。
- 探索在动态的数据库中,基于学习的基数估计方法是否能够表现出色,结果证明基于学习的基数估计方法不能很好的实时的捕捉到数据的更新,经常会产生一些较大的误差,而在更新环境不高的环境下,它们虽然表现的更好,但也没有明显的胜出。
- 深入了解了基于学习的基数估计方法,并探索了它们什么时候会出错。结果显示,数据之间相关性、数据偏斜度、和数据域大小的变化会很大程度上影响基于学习的技术估计方法。更重要的是,它们的表现无法被很好的说明,是不可预测的
基于上述探索发现,文章给出了两个未来的研究方向:- 减少学习模型训练和推理的开销
- 增强学习模型的置信度
引言
简单论述了一下ML FOR DB,提出了三个问题:
- ready for static enviroment?
- ready for dynamic enviroment?
- when learned models go wrong?
learned cardinality estimation
文中本节介绍了一下基数估计问题的描述:
对于一个拥有\(n\)个属性的关系\(R\),我们现在有一个在\(R\)上的\(d\)个查询谓词构成的查询语句例如
SELECT COUNT(*) FROM R
WHERE \(\theta_1\) AND \(\cdots\) and \(\theta_d\),
其中 \(\theta_i\) 等价为一个查询谓词例如\(A = a\),基数估计的任务就是回答\(R\)中有多少元组满足这个查询。选择度问题是一个与之等价的问题,它返回的是满足元组占全部数据的占比。该节将现有的基于学习的基数估计方法分成两类:
- Regression:MSCN、LW-(XGB/NN)、DQM-Q
- Joint Distribution:Naru、DeepDB、DQM-D
Regression 方法论
- 训练阶段
- 构造一个查询池并将真实的CE result作为label
- 将每一条查询语句输入查询特征模型,模型根据查询信息和数据库中的一些统计信息(如一些小的采样集)将查询语句转换成不同的向量
- 将<vector,label>作为训练集放在回归模型中做训练
- 推理阶段
- 用和训练中同样的过程将查询语句转换成特征向量
- 使用训练好的回归模型得到label
- 遇到数据库更新时,必须同时更新查询池和label,产生新的特征向量并重新训练模型。
MSCN
- 将查询语句转换成为一条包含三模块的特征向量(table,join,predict)
- 每个模块都是一个两层的神经网络,不同模块的输出连接起来作为最终输出网络的输入
Joint Distribution 方法论
- 训练阶段:
- 训练出一个联合分布模型表示数据
- 推理阶段:
- 给定查询,他会想模型生成若干个请求,并将模型推断的结果合并作为最终的CE result
- 对于数据库更新,需要更新或重新训练联合分布模型。
Naru & DQM-Q
- 用乘法法则将联合分布近似成条件分布
\]
sum-product Network
- 递归的将表拆解成行集群(作为sum点)和列集群(作为product点),假设不同的列集群是独立的用乘积节点将它们合并。K-MEANS用于集群行;随机化依赖系数用于识别独立列
目前实验中的问题
- 许多新提出的基于学习的基数估计方法没有直接的相互比较
- 没有一个标准的数据集,工作负载的实验表针
- 现有的实验都集中在静态的环境上
Experimental Setup
- 评估标准:Q-error
\]
- code release:https://github.com/sfu-db/AreCELearnedYet
For static enviroment
基于学习的方法比传统方法明显更加准确
Naru是更加准确并且稳定的方法
LW-XGB在大多数情况下可以实现最小的q-error,但在max q-error中无法击败MNSCN
在LW-XGB/NN中误差较大的查询均有如下特征
- 每个选择谓词的选择性都很大,但连接起来后,选择性变得很小
MSCN可以很好的避免上述类型的查询可能是因为在它的输入中使用了一些采样数据。
Naru将所有列建模为离散值,并学习它们的嵌入式表示,这使得改模型非常适合应用于一些数据域较小的数据集(离散值的数量较少)。
基于学习的模型得到更好的准确度的同时,花费了更大的开销。
小结
- learned model 准确率更高
- 除了LW-XGB,其他学习模型的训练时间都高于DBMS产品的方法
- regression models在推理阶段的时间与传统方法差不多,但Joint Distribution models需要更多的推理时间
- 超参数调优是一项额外开销
For dynamic enviroment
- 数据库更新流程;
- 给定一个时间段\([0,T]\),假设有\(n\)个查询平均分布在这个时间段内。拿Naru举例,Naru更新model需要\(0.75T\)时间,也就是说有\(75%\)的查询使用旧的模型做的,更新成功后,还要用新模型对\(75\%\)的查询重新做一次估计。
- 然后就是基于上述流程做实验,分析数据,小结如下
- 基于学习的模型并不能跟上数据的快速更新,其中MSCN、LW-NN、Naru和DeepDB错误率很大
- 在基于学习的模型当中,大家效果都差不多,没啥特别出彩的。在不频繁更新的环境下,Naru表现最好;在更多更新的环境下LW-XGB表现更好。
- 数据驱动方法中DeepDB更新最快,查询驱动方法中LW-XGB更新最快
- 更新时间和准确率有一个权衡困难,还需要大量研究
- GPU能够提高性能,设计一个能从GPU中获益的模型很重要。
When learned methods go wrong?
- 传统方法的一个有点就是它们的透明度,当它们的一些假设条件被违反时,就会产生较大的误差。但基于学习的方法不透明,缺乏理解。这一节中,我们想知道基于学习的方法产生一些较大错误的原因。
- 做的一些实验,对数据的一些分析
- 小结
- 几乎所有基于学习的模型在面对相关性高的数据时都会产生更大的误差,当两列出现函数依赖时,max q-error会变得很高
Research opportunity
效率和精度的权衡
- 使用采样的方法代替全部数据
- 渐进采样
- 训练时早停
- 模型压缩
超参数调优方面优化
- 随机搜索
- 贝叶斯优化
- bandit-based 方法
增强学习模型的可信度
相关工作
单表基数估计
- 直方图使用最为广泛,工业应用
- 基于采样的方法可以支持一些比范围查询更复杂的查询谓词的基数估计
- 一些传统的机器学习的方法
- 曲线拟合
- KDE
- uniform mixture model
多表连接问题
- 传统方法假设不同表之间的数据均匀独立分布
Are we ready for learned cardinality estimation?的更多相关文章
- 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)
最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...
- SQL Server 2014里的针对基数估计的新设计(New Design for Cardinality Estimation)
对于SQL Server数据库来说,性能一直是一个绕不开的话题.而当我们去分析和研究性能问题时,执行计划又是一个我们一直关注的重点之一. 我们知道,在进行编译时,SQL Server会根据当前的数据库 ...
- 解读Cardinality Estimation<基数估计>算法(第一部分:基本概念)
基数计数(cardinality counting)是实际应用中一种常见的计算场景,在数据分析.网络监控及数据库优化等领域都有相关需求.精确的基数计数算法由于种种原因,在面对大数据场景时往往力不从心, ...
- HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm
HyperLogLog参考下面这篇blog, http://blog.codinglabs.org/articles/algorithms-for-cardinality-estimation-par ...
- Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)
最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对“基数”以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了“HyperLogLog”,从而引出了Card ...
- Deep Upsupervised Cardinality Estimation 解读(2019 VLDB)
Deep Upsupervised Cardinality Estimation 本篇博客是对Deep Upsupervised Cardinality Estimation的解读,原文连接为:htt ...
- A Unified Deep Model of Learning from both Data and Queries for Cardinality Estimation 论文解读(SIGMOD 2021)
A Unified Deep Model of Learning from both Data and Queries for Cardinality Estimation 论文解读(SIGMOD 2 ...
- Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021)
Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021) 本 ...
- 用HTTP服务的方式集成learned cardinality estimate方法进 Postgresql
代码地址:postgresql-13.1-ml: Integration of CardEst Methods into PostgreSQL by HTTP Server (github.com) ...
随机推荐
- 鸿蒙内核源码分析(静态站点篇) | 五一哪也没去就干了这事 | 百篇博客分析OpenHarmony源码 | v52.02
百篇博客系列篇.本篇为: v52.xx 鸿蒙内核源码分析(静态站点篇) | 五一哪也没去就干了这事 | 51.c.h.o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...
- CF19E-Fairy【树形结构,差分】
正题 题目链接:https://www.luogu.com.cn/problem/CF19E 题目大意 给出\(n\)个点\(m\)条边的一张无向图,求有多少条边去掉后可以使得图变成一张二分图. \( ...
- Maven----将手动下载的jar包以命令行的方式安装到本地MavenRepository中
1.情景再现:准备实现SprintBoot的热部署功能,因没有对应jar时,在Eclipse中mvn install 会报错: 报错信息: [INFO] --- spring-boot-maven-p ...
- 神器----IntelliJ IDEA基本配置
介绍 首先是百度百科对于 IDEA 的介绍 IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手.代码 ...
- 从commons-beanutils反序列化到shiro无依赖的漏洞利用
目录 0 前言 1 环境 2 commons-beanutils反序列化链 2.1 TemplatesImple调用链 2.2 PriorityQueue调用链 2.3 BeanComparator ...
- cf1082D Maximum Diameter Graph(构造+模拟+细节)
QWQ不得不说 \(cf\)的\(edu\ round\)出这种东西 有点太恶心了 题目大意:给你\(n\)个点,告诉你每个点的最大度数值(也就是说你的度数要小于等于这个),让你构造一个无向图,使其满 ...
- 洛谷4366——最短路(dijkstra,思维,异或)
题目大意 给定一个n个点,m条边的图,每条边有边权,而每个点\(i\)也可以直接到达\(j\),代价是\(i\ xor\ j\),给定一个S和T,求S到T的最小代价 其中\(n\le100000,m\ ...
- pycharm设置文件中显示模板内容
pycharm中设置自己的文件模板 File>>Settings>>Editor>>File and Code Templates 选择文件类型或者输入文件类型 ...
- 使用寄存器点亮LED
1. 项目:使用stm32寄存器点亮LED, 分别点亮红.绿.蓝3个灯. 2. 代码: 只需要编写main.c程序,stm3210x.h程序为空(只需要新建即可). 2.1 点亮绿灯main.c程序 ...
- 【Java虚拟机9】类加载器之命名空间详解
前言 前面介绍类加载器的时候,介绍了一下命名空间这个概念.今天就通过一个例子,来详细了解一下[类加载器的命名空间].然后通过这个例子,我们可以总结一下双亲委托模型的好处与优点. 例1(不删除class ...