Are we ready for learned Cardinality Estimation

摘要

文章包括三大部分:

  • 对于一个静态的数据库,本文将五种基于学习的基数估计方法与九中传统的基数估计方法在四个现实世界的数据集和统一的工作负载上进行了比较。结果说明基于学习的基数估计方法比传统方法更加准确,但也需要更多训练和推理的开销。
  • 探索在动态的数据库中,基于学习的基数估计方法是否能够表现出色,结果证明基于学习的基数估计方法不能很好的实时的捕捉到数据的更新,经常会产生一些较大的误差,而在更新环境不高的环境下,它们虽然表现的更好,但也没有明显的胜出。
  • 深入了解了基于学习的基数估计方法,并探索了它们什么时候会出错。结果显示,数据之间相关性、数据偏斜度、和数据域大小的变化会很大程度上影响基于学习的技术估计方法。更重要的是,它们的表现无法被很好的说明,是不可预测的

    基于上述探索发现,文章给出了两个未来的研究方向:

    1. 减少学习模型训练和推理的开销
    2. 增强学习模型的置信度

引言

简单论述了一下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\)中有多少元组满足这个查询。选择度问题是一个与之等价的问题,它返回的是满足元组占全部数据的占比。

  • 该节将现有的基于学习的基数估计方法分成两类:

    1. Regression:MSCN、LW-(XGB/NN)、DQM-Q
    2. 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

  • 用乘法法则将联合分布近似成条件分布
\[P(A_1,A_2,\cdots,A_N)=P(A_1)P(A_2|A_1)\cdots P(A_N|A_1,\cdots,A_{n-1})
\]

sum-product Network

  • 递归的将表拆解成行集群(作为sum点)和列集群(作为product点),假设不同的列集群是独立的用乘积节点将它们合并。K-MEANS用于集群行;随机化依赖系数用于识别独立列

目前实验中的问题

  • 许多新提出的基于学习的基数估计方法没有直接的相互比较
  • 没有一个标准的数据集,工作负载的实验表针
  • 现有的实验都集中在静态的环境上

Experimental Setup

  • 评估标准:Q-error
\[{error} = \frac{max({est(q)},act(q))}{min({est(q)},{act(q)})}
\]

For static enviroment

  • 基于学习的方法比传统方法明显更加准确

  • Naru是更加准确并且稳定的方法

  • LW-XGB在大多数情况下可以实现最小的q-error,但在max q-error中无法击败MNSCN

  • 在LW-XGB/NN中误差较大的查询均有如下特征

    • 每个选择谓词的选择性都很大,但连接起来后,选择性变得很小
  • MSCN可以很好的避免上述类型的查询可能是因为在它的输入中使用了一些采样数据。

  • Naru将所有列建模为离散值,并学习它们的嵌入式表示,这使得改模型非常适合应用于一些数据域较小的数据集(离散值的数量较少)。

  • 基于学习的模型得到更好的准确度的同时,花费了更大的开销。

  • 小结

    1. learned model 准确率更高
    2. 除了LW-XGB,其他学习模型的训练时间都高于DBMS产品的方法
    3. regression models在推理阶段的时间与传统方法差不多,但Joint Distribution models需要更多的推理时间
    4. 超参数调优是一项额外开销

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?的更多相关文章

  1. 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...

  2. SQL Server 2014里的针对基数估计的新设计(New Design for Cardinality Estimation)

    对于SQL Server数据库来说,性能一直是一个绕不开的话题.而当我们去分析和研究性能问题时,执行计划又是一个我们一直关注的重点之一. 我们知道,在进行编译时,SQL Server会根据当前的数据库 ...

  3. 解读Cardinality Estimation<基数估计>算法(第一部分:基本概念)

    基数计数(cardinality counting)是实际应用中一种常见的计算场景,在数据分析.网络监控及数据库优化等领域都有相关需求.精确的基数计数算法由于种种原因,在面对大数据场景时往往力不从心, ...

  4. 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 ...

  5. Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对“基数”以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了“HyperLogLog”,从而引出了Card ...

  6. Deep Upsupervised Cardinality Estimation 解读(2019 VLDB)

    Deep Upsupervised Cardinality Estimation 本篇博客是对Deep Upsupervised Cardinality Estimation的解读,原文连接为:htt ...

  7. 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 ...

  8. 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) 本 ...

  9. 用HTTP服务的方式集成learned cardinality estimate方法进 Postgresql

    代码地址:postgresql-13.1-ml: Integration of CardEst Methods into PostgreSQL by HTTP Server (github.com) ...

随机推荐

  1. 华为云计算IE面试笔记-华为云计算解决方案业务迁移支持哪些迁移?有哪些特点?请描述基本的业务交付流程、业务迁移流程和原则。

    1. 迁移场景:华为云计算解决方案按照源端环境来说,支持P2V.V2V(P2V:物理设备(操作系统及其上的应用软件和数据)迁移到华为虚拟化平台.V2V:其他厂商的虚拟化平台迁移到华为虚拟化平台.)以及 ...

  2. mqtt网关服务器连接阿里云关联物模型

    mqtt网关服务器连接阿里云关联物模型 卓岚专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体. 可以连接阿 ...

  3. Python日常Bug集

    1.TypeError: 'int' object is not iterable: 场景示例: data = 7 for i in data: print(i) # 原因:直接对int数据进行迭代造 ...

  4. IO流基本概念

    IO流主要分为两类 节点流:直接能够进行数据写入或读取的I0流.可以单独执行读写操作,但是功能比较单一,只能进行一些基本 的操作.例如:FileInputStream FileInputStream ...

  5. Python:安装opencv出现错误Could not find a version that satisfies the requirement numpy==1.13.3 (from versions: 1.14.5, 1.14.6, 1.15.0rc2, 1.15.0, 1.15.1, 1.15.2, 1.15.3, 1.15.4, 1.16.0rc1, 1.16.0rc2,

    安装opencv的时候,出现numpy的版本不匹配,卸载了不匹配的版本,重新安装却是一点用都没有,后面尝试了一下这里的提示pip更新,居然安装成功了,看来pip的版本过低真是误事啊. 报错是: Cou ...

  6. 前端规范之Git工作流规范(Husky + Comminilint + Lint-staged)

    代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...

  7. python-docx 页面设置

    初识word文档-节-的概念 编辑一篇word文档,往往首先从页面设置开始,从下图可以看出,页面设置常操作的有页边距.纸张方向.纸张大小4个,而在word中是以节(section)来分大的块,每一节的 ...

  8. 洛谷3703 SDOI2017树点涂色(LCT+线段树+dfs序)

    又一道好题啊qwqqqq 一开始看这个题,还以为是一个树剖的什么毒瘤题目 (不过的确貌似可以用树剖啊) qwq这真是一道\(LCT\)维护颜色的好题 首先,我们来一个一个操作的考虑. 对于操作\(1\ ...

  9. java设计模式_工厂模式

    关于设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结,是一种设计思维,使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证 ...

  10. Redis大集群扩容性能优化实践

    一.背景 在现网环境,一些使用Redis集群的业务随着业务量的上涨,往往需要进行节点扩容操作. 之前有了解到运维同学对一些节点数比较大的Redis集群进行扩容操作后,业务侧反映集群性能下降,具体表现在 ...