Are We Ready For Learned Cardinality Estimation?

一、简介

针对现有学习方法的限制提出了下列四点贡献:

  1. 基于学习的方法为静态环境做好准备了吗?
  2. 基于学习的方法为动态环境做好准备了吗?
  3. 基于学习的方法什么时候会出错?
  4. 研究机会
    我们在第2节给出了一个关于学习基数估计的调查,并在第3节描述了一般的实验设置。我们在第4节探讨学习的方法是否适合静态环境,在第5节探讨动态环境,并在第6节检查学习的方法何时出错。第7节讨论了未来的研究机会。第8节讨论了多表方案,第9节回顾了相关工作。最后,我们在第10节提出我们的结论。

二、基于学习的基数估计方法调查

2.1问题陈述

考虑一个具有n个属性的关系和在关系R上具有d个谓词的查询:

其中的d个谓词可以是等值谓词和开放范围谓词或者是封闭范围谓词。

2.2分类法

将ML用于CE的想法并不新鲜,最新的方法是采用更先进的最大似然模型如深度神经网络、梯度增强树、和积网络和深度自回归模型。相比之下,我们称传统方法为基于直方图或经典最大似然模型(KDE和贝叶斯网络)的方法。

我们把新方法分为回归和联合分布方法。回归方法(也称为查询驱动方法)将基数估计建模为回归问题,旨在通过特征向量在查询和并行工程结果之间建立映射(查询-》特征向量-》基数估计结果)。联合分布方法(也称数据驱动方法)将基数估计建模为一个联合概率分布估计问题旨在从表中构造联合分布,然后估计基数。下面对这些方法具体介绍:

方法1.回归

方法2:联合分布

方法3:现有实验的局限性

  1. 许多新学习的方法之间没有直接比较。
  2. 没有关于使用哪些数据集以及如何生成工作负载的标准。
  3. 现有的工作集中在静态环境(没有数据更新设置)。

三、实验装置

我们的研究评估了不同设置下的学习基数估计量。我们在这一部分描述了所有实验中使用的一般设置。

评估指标:

我们使用q-error作为我们衡量评估结果质量的准确性指标。q-error是一个对称度量它计算估计值与实际基数不同的因素。

例如,如果一个查询的实际基数是10,估计基数是100。那么error值就为error=max(100,10)/min(100,10)。
Q-error是所有学习方法采用的度量,它测量相对误差,这可以在相同程度上惩罚大小结果。此外,它被证明与查询优化中的计划质量直接相关。

学习方法和实施:

如表1所示,最近发表的关于学习方法的论文有5篇:Naru [95]、MSCN [34]、LW-XGB/NN [18]、DeepDB [30]和DQM [28]。我们将DQM排除在我们的研究之外,因为它的数据驱动模型与Naru具有相似的性能,并且它的查询驱动模型不支持我们的工作负载(DQM的作者证实了这一点)。
对于naru3和DeepDB4,我们采用了作者发布的实现,并做了一些小的修改,以支持我们的实验。我们选择ResMADE作为Naru的基本自回归构造块,因为它既高效又准确。对于MSCN,由于原始模型支持连接查询,它需要额外的输入特性来指示不同表上的不同连接和谓词。为了确保单表基数估计的公平比较,我们修改了原始代码5,只保留了表示谓词和限定样本的特性。根据LW-XGB/NN的原始文献[18]中的描述,我们实现了LW-XGB/NN的神经网络(LW-NN,在PyTorch [67]上)和梯度增强树(LW-XGB,在XGBoost [10]上)方法,并使用Postgres在单个列上的估计结果来计算CE特征。包括数据集操作、工作负载生成和评估器评估在内的所有代码都已发布6。

硬件和平台:

我们在一台配备16个英特尔至强E7-4830 v4处理器(2.00千兆赫)的服务器上进行实验。对于神经网络模型(Naru、MSCN、LW-NN),我们不仅在CPU上运行它们,还在NVIDIA Tesla P100 GPU上运行它们,以获得不同设置下的更多见解。

四、学习的方法为静态环境做好准备了吗?

在静态环境下,学习估计比传统方法更准确吗?高精度的代价是什么?在本节中,我们首先将所学方法的准确性与传统方法进行比较,然后测量它们的训练和推理时间,以查看它们是否准备好投入生产。

4.1设置

数据集:

我们使用了四个具有不同特征的真实数据集。

我们选择这些数据集是因为,首先,这些数据集的大小不同,分类列和数字列之间的比率不同;第二,每个数据集都被用于评估该领域至少一个先前的工作。

工作负载:

我们提出了一个统一的工作负载生成器。我们的工作负载生成器的目标是能够覆盖现有学习方法中使用的所有工作负载设置(参见表2)。我们在同一实验中对所有数据集应用相同的生成器设置。

超参数调整

我们描述了每个模型的超参数调整。更多细节可以在我们的Github存储库中找到。

传统技术

我们比较了各种传统的技术,这些技术要么被真实的数据库系统使用,要么被报道最近达到了最先进的性能。我们选择的方法可以代表广泛的解决方案。

  1. Postgres、MySQL和DBMS-A用于表示真实数据库系统的性能。我们使用PostgreSQL 11.5和8.0.21 MySQL社区服务器,DBMS-A是领先的商业数据库系统。他们用简单的统计和假设快速估计基数。为了让它们达到最佳的准确率,我们将直方图桶的数量设置为上限(Postgres为10,000,MySQL为1024)。对于DBMS-A,我们创建了几个多列统计,以便用直方图覆盖所有列。请注意,即使有最大数量的桶,这些统计数据的大小也比我们的大小预算小得多,并且导致比我们实验中的其他传统和学习方法更少的内存消耗。
  2. 样本A、样本B显示估计量采用抽样。样本-A使用统一的随机样本,众所周知,当样本中没有元组满足所有谓词时,它会导致很大的错误。因此,我们还包括Sample-B,它假设在零元组情况下每个谓词之间是独立的。对于这两种方法,我们从每个数据集中抽取1.5%的元组。
  3. MHIST [73]在整个数据集上构建多维直方图。我们选择Maxdiff作为分区约束,值和面积作为排序和源参数,因为根据[74],这是最准确的选择。我们迭代运行MHIST-2算法,直到它达到数据大小的1.5%。
  4. QickSel [66]代表了查询驱动的多维概要方法的性能。它利用查询反馈,用均匀混合模型对数据分布进行建模。我们选择QickSel是因为它比查询驱动的直方图(包括[66]中的STHoles [6]和isolate[81])显示出更好的准确性。我们使用10K查询来训练模型。
  5. 贝叶斯[13]显示了概率图形模型方法的估计结果[14,24,88]。我们在[95]中采用了相同的实现,它使用渐进采样来估计范围查询,并显示出非常有希望的准确性。
  6. KDE-FB [29]代表了用核密度模型模拟数据分布的性能。它通过查询反馈优化带宽来改善朴素KDE。我们从每个数据集中抽取1.5%的元组(最大为150K),并使用1K个查询来训练模型。

4.2 学到的方法更准确吗?

我们首先想了解与传统方法相比,所学方法在提高准确性方面所做的努力。我们在每个数据集上使用10K查询测试所有方法。表4显示了q误差比较结果。“传统方法”部分中的粗体值表示传统方法可以达到的最小q误差范围,而在“学习的方法”部分,它强调了学习的方法,可以实现比最好的传统方法更小(或相等)的q误差。最后一行总结对比,用“赢”表示学过的方法打败传统方法,“输”表示相反。

4.3 高精度的代价是什么?***

既然学习过的方法可以在很大程度上击败真实数据库系统中使用的基数估计器,我们可以直接部署它们吗?在这一节中,我们考察这些高度精确的成本学习的方法。我们将学习的方法与数据库系统在训练时间和推理时间上进行比较,看它们是否能达到DBMS产品的水平。图5显示了比较结果。

训练时间

对于学习的方法,我们记录用于训练表4中报告的模型的时间。对于数据库系统,我们记录运行统计信息收集命令的时间。
数据库系统可以在几秒钟内完成对所有数据集的统计,而学习的方法一般需要几分钟甚至几个小时,这取决于底层的机器学习模型。基于梯度增强树的LW-XGB是学习速度最快的方法。当使用较少的树时,如在人口普查和电力数据集中,它可以像一些数据库管理系统一样快。DeepDB是第二快的,构建SPN模型需要几分钟,这也受到输入样本量和停止条件的影响。采用神经网络的方法一般需要较长的时间。由于我们在所有数据集上使用相同的时代,Naru的训练时间高度依赖于数据大小和平台。有了GPU,在普查上只需要1分钟,而在车管所上需要4个多小时,在CPU上这个时间会慢5倍到15倍。GPU加速也会影响LW-NN,在所有数据集上完成训练大约需要30分钟,但在CPU上的时间可能会延长20倍。另一方面,MSCN在两台设备上表现出相似的训练时间,在小数据集上GPU甚至比CPU慢3.5倍。这是因为MSCN需要处理条件工作流来最小化其损失(平均q误差),这在GPU上变得更慢,并且当模型更小时,影响变得更加明显。
在训练时间和模型精度之间有一个折衷。以迭代方式训练的神经网络方法(Naru、MSCN和LW-NN)会以较少的训练迭代产生较大的误差。对于所有这些模型,我们采用相同的报告时代在所有数据集上的原始论文中,尽管一些模型可以用少得多的迭代获得类似的性能。例如,使用少80%的时间,我们可以在DMV数据集上训练一个Naru模型,而性能仅略有下降。然而,即使我们只在GPU上运行1 epoch,它仍然会比数据库系统慢得多。我们将在第5.3节中进一步探讨这种权衡。

推断时间

我们通过逐个发出查询来计算10K测试查询的平均推理时间。图5显示了结果。对于数据库系统,我们通过它们返回执行计划(不执行)的延迟来近似时间,由于解析和绑定等其他开销,该时间应该比实际基数估计时间长。尽管如此,所有三个数据库管理系统都可以在1或2毫秒内完成整个过程。学习方法的推理时间取决于底层模型。查询驱动的方法(MSCN和LW-XGB/NN)非常有竞争力,可以实现与DBMS相似或更好的延迟(但请注意,DBMS的结果包括其他开销)。这是因为它们采用了通用回归模型,直接对查询空间建模,并且在实现方面也进行了很好的优化。另一方面,剩下的方法采用更专业的模型,速度要慢得多。DeepDB中的SPN模型在三个较大的数据集上需要大约25毫秒,在人口普查中平均需要5毫秒。Naru的推理过程包括一个渐进采样机制,需要运行模型上千次才能得到准确的结果。它的总时间对运行的设备比较敏感,在GPU上需要5毫秒到15毫秒,CPU可以慢20倍。

超参数调整

超参数调整是学习方法的另一个成本。表4中所示的学习模型代表具有最佳超参数的模型。然而,如果没有超参数调整,学习模型的表现可能会非常糟糕。在我们的实验中,我们发现对于相同的方法,在具有不同超参数的模型中,最大和最小最大q误差之间的比率可以高达105。
尽管超参数调谐对于高精度至关重要,但它是一个非常昂贵的过程,因为它需要训练多个模型来找到最佳的超参数。例如,如图5所示,Naru花了4个多小时用GPU在DMV上训练单个模型。如果训练五个模型,那么Naru需要花费20多个小时(几乎一天)进行超参数调整。

4.4主要发现

  1. 在我们的实验中,新的学习估计器可以提供比传统方法更准确的预测,在学习方法中,Naru表现出最稳健的性能。
  2. 就训练时间而言,除了LW-XGB之外,新学习的方法在数量上可能比DBMS产品慢。
  3. 基于回归模型(MSCN和LW-XGB/NN)的新学习估计器在推理时间上可以与数据库系统竞争,而直接对数据进行联合分布建模的方法(Naru和DeepDB)需要更长的时间。
  4. GPU可以加快一些新学习的估计器的训练和推理时间,但它不能使它们像DBMS产品一样快,有时会引入开销。
  5. 对于采用基于神经网络的估计器来说,超参数调整是一个不可忽视的额外成本。

五、学习的方法为动态环境做好准备了吗?

5.5主要发现

  1. 学习的方法赶不上快速的数据更新。在动态环境中,由于不同的原因,MSCN、LW-NN、Naru和DeepDB会返回较大的误差。
  2. 在所学的方法中,没有明确的赢家。Naru在数据更新不频繁的情况下表现最好,而LW-XGB在更动态的环境下表现最好。
  3. 在更新时间上,DeepDB是最快的数据驱动方法,LW-XGB是最快的查询驱动方法。
  4. 学习方法的更新时间和准确性之间存在权衡。在实践中权衡利弊并不容易,需要在这个问题上进行更多的研究。
  5. GPU能够提高性能,但不一定。为了从GPU中受益,设计一个好的策略来处理模型更新是很重要的。

六、学习的方法什么时候会出错?

6.5主要发现

  1. 所有新学习的估计量倾向于在更相关的数据上输出更大的误差,并且当两列是函数相关的时,最大q-error跳跃相当显著。
  2. 对于更偏斜的数据或具有更大域大小的数据,不同的方法有不同的反应。这可能是由于模型选择、输入特征和损失函数的不同。
  3. 我们为基数估计器提出了五条规则,并发现除了DeepDB之外,所有新学习的模型都违反了这些规则。
  4. 当在生产中部署时,在新学习的估计器中使用的模型的不透明性在可调试性、可解释性、可预测性和可再现性方面可能是麻烦的。

七、研究机会

7.1控制学习估计的成本

7.2让学习估计值得信赖

八、多表场景

十、结论

在我们的论文中,我们提出了一个重要但尚未探索的问题:“我们准备好学习基数估计了吗?”。我们调查了七种新学到的方法,并把它们分类。发现现有的实验研究不足以回答这个问题。作为回应,我们提出了一个统一的工作负载生成器,并在四个真实世界和一个合成数据集上进行了全面的实验。我们探索了学习的方法是否为静态环境和动态环境做好了准备,并探讨了学习的方法何时可能出错。最后,我们发现了一些有前景的研究机会。
我们得出结论,新的学习方法比传统方法更准确。然而,为了将它们放在一个开发良好的系统中,有许多缺失的部分需要解决,例如训练和推理速度慢、超参数调整、黑盒特性、不合逻辑的行为以及处理频繁的数据更新。因此,当前学习的方法仍然没有准备好部署在真正的数据库管理系统中。总的来说,这是一个重要和有希望的方向,有待我们的社区进一步探索。

【论文阅读】Are We Ready For Learned Cardinality Estimation?相关推荐

  1. 【论文阅读笔记】High Quality Monocular Depth Estimation via Transfer Learning

    文章目录 High Quality Monocular Depth Estimation via Transfer Learning Abstract 1. Introduction 2. Relat ...

  2. 【Hll】Hll HyperLogLog: Cardinality Estimation(基数估计算法源码解析)

    1.概述 好文章,转载防丢失 主要是这里有源码,我遇到问题了,问题是flink在累加器中使用的时候,每次累加最终结果是1,2 每次到了2 就会重新回到1,很郁闷于是看看源码 2.背景 我们经常会统计某 ...

  3. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](5)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](5) Graph Neural Networks 图神经网络 Now th ...

  4. [论文阅读] (12)英文论文引言introduction如何撰写及精句摘抄——以入侵检测系统(IDS)为例

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  5. 3D目标检测论文阅读多角度解析

    3D目标检测论文阅读多角度解析 一.前言 CNN(convolutional neural network)在目标检测中大放异彩,R-CNN系列,YOLO,SSD各类优秀的方法层出不穷在2D图像的目标 ...

  6. 【论文阅读】Learning Traffic as Images: A Deep Convolutional ... [将交通作为图像学习: 用于大规模交通网络速度预测的深度卷积神经网络](2)

    [论文阅读]Learning Traffic as Images: A Deep Convolutional Neural Network for Large-Scale Transportation ...

  7. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](7)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](7) Into the Weeds Other types of grap ...

  8. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](6)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](6) GNN playground Some empirical GNN ...

  9. DnCNN论文阅读笔记【MATLAB】

    DnCNN论文阅读笔记 论文信息: 论文代码:https://github.com/cszn/DnCNN Abstract 提出网络:DnCNNs 关键技术: Residual learning an ...

  10. Learning Multiview 3D point Cloud Registration论文阅读笔记

    Learning multiview 3D point cloud registration Abstract 提出了一种全新的,端到端的,可学习的多视角三维点云配准算法. 多视角配准往往需要两个阶段 ...

最新文章

  1. 定制语音代理(智能体)的背后是什么?
  2. SpringBoot 1024行代码 - 系统监控工具 Actuator简介
  3. 4.Java面向对象相关知识总结
  4. Nginx之简介与安装(一)
  5. 关于Java你不知道的那些事之Java注解和反射
  6. kafka 消息服务
  7. 10 个有关 String 的面试问题
  8. aws上部署hadoop_在AWS Elastic MapReduce上运行PageRank Hadoop作业
  9. 关于解决Codeblocks中文乱码问题
  10. mac抹掉磁盘重装系统未能与服务器取得联系_Mac重装系统不再难:苹果电脑重装系统教程...
  11. Matlab中fixdt数据类型
  12. python AES使用
  13. Java 集合系列Stack详细介绍(源码解析)和使用示例
  14. 现代密码法学算法分类
  15. python爬取网络中的QQ号码
  16. 对小米路由器提出严正批评,2.4G下,40MHz自动变20MHz
  17. 太厉害了!30行代码抓取上万个小姐姐跳舞视频,有点飘了~
  18. 未授权下载导致的信息泄露
  19. Java实现仿QQ聊天工具的项目总结
  20. 基于titanic数据集介绍数据分析处理流程

热门文章

  1. SpringSecurity实战(五)-认证流程源码分析
  2. 【游戏开发实战】(完结)使用Unity制作水果消消乐游戏教程(九):使用UGUI显示游戏UI
  3. 1)华为手机使用电脑批量管理联系人 - 2)华为云空间联系人同步到手机 - 3)华为手机导入联系人列表
  4. 计算机安装网络打印机,如何安装网络打印机?电脑上安装网络打印机详细教程...
  5. 阿里云消息服务(MNS)简单介绍
  6. web渗透的信息收集
  7. 逐向双碳:绿色计算的误区与正确打开方式
  8. html中楷书的格式,中国书法的书写格式
  9. C# 反射之Activator用法举例
  10. 金融经济学二十五讲--徐高