【论文翻译】FLAT: Fast, Lightweight and Accurate Method for Cardinality Estimation

FLAT: Fast, Lightweight and Accurate Method for Cardinality Estimation

摘要

查询优化器依赖基数估计确定查询执行计划,核心问题是如何准确紧凑的对丰富的属性联合分布进行建模。尽管已有几十年的研究,现有的方法要么只使用独立的因子分解过于简化模型而导致估计不准确,要么不做任何独立的假设而使用无损条件因子分解过于复杂而导致概率计算缓慢。在本文中,我们提出了一种FLAT的方法,它具有概率计算速度快、模型尺寸轻量化和估计质量准确的特点。FLAT的关键思想是一种新的无监督图形模型,称为FSPN。它同时利用独立因子分解和条件因子分解对不同层次的属性关联进行自适应建模,从而与它们的优点相吻合。FLAT支持在接近线性时间内对基础fspn模型进行高效的在线概率计算,提供有效的离线模型构建,并支持增量式模型更新。它可以估计单个表查询和多表连接查询的基数。大量的实验研究表明,在知名的IMDB基准上,FLAT比现有的CardEst方法有优势:FLAT的精度提高了1-5个数量级,概率计算速度提高了1-3个数量级,存储成本降低了1-2个数量级。我们还将FLAT集成到Postgres中,以执行端到端测试。在基准测试工作负载上,它将查询执行时间提高了12.9%,非常接近使用真正基数的最佳结果14.2%。

一、介绍

基数估计(CardEst)是现代数据库管理系统(DBMS)和分析引擎中查询优化器的关键组成部分[1,47]。它的目的是在SQL查询计划实际执行之前估计其结果大小,因此在生成高质量的查询计划中起着核心作用。
基数估计的主要任务是:怎样把一张表T中的信息支持高效的计算表中满足查询Q的条数。一般有以下两种方法:

  1. 查询驱动:训练一个函数将查询Q映射到一个概率P,所以需要大量执行的查询作为训练样本。只有当将来的查询遵循与训练工作负载相同的分布时,它们才会表现良好。
  2. 数据驱动:学习无监督模型,Pr(T)——表T中属性的联合概率密度函数(PDF)。
基数估计的挑战和状态

从实际需求来看,一种有效的数据驱动CardEst方法应该同时满足三个标准。首先,评估质量必须尽可能准确,因为错误的传播很容易导致优化器选择次优的查询计划[17,51]。其次,由于在优化查询计划[10]时会多次使用CardEst方法,因此概率计算必须是快速的。第三,该模型在存储容量方面更轻。现有的方法在这三个标准之间进行了一些权衡。然而,在建模真实世界的复杂数据时,它们仍然存在一个或多个缺陷。图1说明了当前CardEst方法的性能状态。
在这里插入图片描述
简而言之,这有三个主要的策略在数据表T上构造无监督模型。第一个策略是直接压缩并存储Pr(T)全部的实体,其存储开销难以控制,且有损压缩会严重影响估计精度。第二种策略是基于抽样或者核密度的方法,样本用来粗略的估计概率。对于高维数据,如果没有足够的样本,它们可能是不准确的,或者因为样本量大而导致效率低下。第三种是基于分解的方法,将条件概率模型分解为多个低维的,使他们的适当组合可以近似表示高维。然而,现有的方法往往不能平衡这三个标准。一些方法,包括深度自回归模型和贝叶斯网络可以使用条件因式分解无损的分解。然而,它们的概率计算速度大大降低。其他方法,如直方图[45]和和积网络[16],假设全局和局部独立。当独立假设不成立时,它们的计算效率很高,但估计精度较低。在第2节中,我们将详细分析现有的数据驱动的基数估计方法。

我们的贡献

在本文中,我们更全面地解决了基数估计问题,以满足所有这三个标准。我们观察到:条件分解可以准确地分解PDF,但概率计算是昂贵的,反之亦然,独立分解。为了吸收它们的优点,我们设计了一个新的图形化模型,称为分解和分裂积网络(FSPN)。它的关键思想是根据属性的依赖程度适应性的分解Pr(T)。具体来说,通过条件分解将高相关属性和弱相关属性的联合PDF无损分离,并建立相应的模型。对于高度相关的属性,不同维度的值为相互依赖的,因此,它们的联合PDF可以很容易地建模为多元PDF。对于弱相关属性,将它们的联合PDF分割成多个小区域,每个小区域的属性相互独立。我们证明了FSPN包含直方图、和积网络和贝叶斯网络,并充分利用了它们的优点。
基于FSPN模型,我们提出了一种快速、轻量化、准确的基数估计方法FLAT,如图1所示。在单个表上,FLAT采用了一种有效的离线方法来构建FSPN的结构,并利用FSPN进行了一种高效的在线概率计算方法。FLAT的概率计算复杂度几乎是线性的。此外,FLAT还支持在底层数据更改时快速增量更新FSPN。
对于多表连接查询,FLAT使用了一个新的框架,它比现有的工作更加通用和适用[13,16,19,55]。在脱机阶段,将表划分为几个组,并为每个组构建一个FSPN。在联机阶段,FLAT以一种快速的方式组合子查询的概率以获得最终的结果。
在我们的评估中,与所有现有的方法相比,FLAT在单表和多表情况下都实现了最先进的性能。综上所述,我们的主要贡献如下:

  1. 我们根据上述三个标准(在第2节)详细分析了现有数据驱动基数估计方法的现状。
  2. 我们提出了FSPN,一种新的无监督图形模型,它以一种自适应的方式结合了现有方法的优点(在第3节)。
  3. 我们在单表和多表连接查询(见第4节和第5节)上提出了FLAT,一种具有快速概率计算、高估计精度和低存储成本的基数估计方法。
  4. 我们在Postgres上进行了大量的实验和端到端测试,以证明我们提出的方法的优越性和实用性(在第6节)。

二、问题定义和背景

在本节中,我们正式定义基数估计问题,并分析数据驱动的基数估计方法的状态。在分析的基础上,我们总结了一些启发我们工作的关键发现。

基数估计问题

T是一张表,包含K个属性{A1,A2,…,AK}。T可以是单个表,也可以是数据库中多个表的连接。不失一般性,我们假设A的定义域为{LBi,UBi}。
在本文中,我们不考虑字符串上的“LIKE”查询。任何选择查询Q可以用规范形式表示:每个区间的端点也可以是开放的。Q包括点查询和范围查询。对于中间有间隔的查询可以转化为上述形式的多个查询。
无监督的基数估计以纯粹数据驱动的方式解决了这个问题,可以正式表述如下:

离线训练:

给一个表T和一组属性A作为输入,输出一个模型近似于表T在属性A中的联合概率分布。

在线概率计算:

将该模型和一个查询Q作为输入,输出概率乘以表的条数作为估计基数。

数据驱动的CardEst方法分析:

我们使用三个标准,模型的准确性,概率计算速度和存储开销,分析现有的方法。结果如下:

  1. 有损的FullStore[11,40]使用压缩技术存储Prt(A)中所有的条目,它的存储在属性数量上呈指数增长并变得难以处理。
  2. 基于样本和内核的方法:从表T中采样或者使用以采样点为中心的平均核来估计Prt(Q)。对于高维数据,如果没有足够的样本,它们可能是不准确的,或者因为样本量大而导致效率低下。或者,一个更有希望的方法是将Prt(A)因式分解为多个低维的联合概率分布这样可以更容易存储和建模。有代表性的方法如下:
  3. 直方图假设所有属性都是相互独立的,然而,由于忽略了属性之间的相关性,估计误差可能会很高。
  4. 深度自回归模型根据链式法则分解联合PDF。每个条件PDF都可以通过深度神经网络(DNN)参数化建模。而DNNs的表达能力允许Prt(A)被很好的近似,概率计算的时间和空间代价随DNN的宽度和深度增加而增加。此外,对于范围查询Q,对范围内许多样本点的概率求平均值。因此,DAR上的概率计算相对较慢。
  5. 贝叶斯网络将所有属性之间的依赖结构建模为有向无环图,并假设每个属性都有条件地独立于给定父属性的其余属性。从数据中学习BN结构和BN上的概率计算都是np困难的
  6. 合积网络
灵感

在分析的基础上,数据库界还没有找到一种既准确、快速、又轻量级的综合有效的CardEst方法。一个关键原因是每个方法只应用一种类型的因式分解。 特别是直方图和SPN利用独立性因式分解方法。然而,每个分解方法本身只满足三个标准中的一个或两个:独立因子分解存储成本低,支持快速的概率计算,但估计误差较大;条件因子分解可以准确地分解PDF,但概率计算代价高昂。因此,这两种分解方法在不同的情况下发挥各自的优势。
这引出了我们的关键问题:如果我们能以一种自适应的方式,应用这两种因式分解,是否有可能获得同时满足所有三个标准的方法?我们用一个新的无监督模型肯定地回答了这个问题,(FSPN)它集成了两种分解方法的优点。

三、FSPN模型

在本节中,我们介绍FSPN,一种新的树结构图形模型,以自适应的方式表示一组属性的联合PDF。我们首先用一个例子解释了FSPN的关键思想,然后给出了它的形式化定义。最后,我们将FSPN与上述模型进行比较。

FSPN的关键思想

FSPN可以因式分解不同依赖程度的属性。条件因子分解方法用于分离高相关属性和弱相关属性。然后,高度相关属性直接在一起建模,弱相关属性使用独立因子分解方法递归逼近。图2(a)给出了一个表T的例子,包含下列属性:水浊度(A1), 温度(A2),波高(A3),风力(A4)。图2(b)中构建其FSPN的过程如下:在这里插入图片描述
首先,我们检查表T的每一对属性之间的相关性。A3和A4高度相关,因此,它们不能被分解为独立的属性除非我们将T分割形成非常小的簇,如SPN。相反,我们可以尽可能早地无损地将它们从其他属性中分离出来,并分别处理每个部分。让H包括{A3,A4},W包括{A1,A2}。我们应用条件因子分解方法进行了因子分解Prt(A) = Prt(W)*Prt(H|W),然后 Prt(W),Prt(H|W)以不同的方式进行建模。
W中的A1,A2两个属性不是独立的,但它们之间的相关性很弱。因此,我们可以对的小子集使用独立因子分解方法。在我们的示例中,如果我们将所有记录T拆分为T1,T2,根据A1是否低于50,A1和A2在T1和T2中都是独立的。这种情况叫做上下文无关,因此Prt1(W)=Prt1(A1)*Prt1(A2)。然后我们简单地使用两个单变量pdf分别为Prt1(A1)和Prt1(A2)在T1上建模。同样,我们也进行建模Prt2(W)=Prt2(A1)*Prt2(A2)。
对于条件PDF Prt(H|W)我们不需要为每个w值指定。相反,我们可以递归拆分T为多个区域,这样在每一个区域Tj,H是独立与W的,Prtj(H)=Prtj(H|W)。在这个时候,对于W中落在同一区域的任何w,Prtj(H|W)保持不变,所以对于每个地区我们只需要维持Prtj(H)。我们把这种情况称为上下文条件删除。在我们的例子中,我们把T分成T3和T4,由是否条件属性A1低于0.9决定。W独立于H,在每个叶节点区域,所以我们只需要建模Prt3(H)和Prt4(H)。因此,我们将它们建模为两个多元叶节点L5和L6。注意,在H中的属性值是相互依存的以及他们的联合概率分布Prt3(H)和Prt4(H)在二维空间中是稀疏的,因此,它们很容易建模为多元PDF。
最后,我们得到一个FSPN在图2 ©,包含11个节点,其中5个内部节点表示拆分数据的不同操作,6个叶子节点保存原始数据不同部分的pdf。

FSPN的思想

四、单表基数估计方法

在本节中,我们提出了FLAT,一种基于FSPN的快速、轻量级和精确的基数估计算法。第4.1节首先介绍FLAT如何在线计算FSPN上的概率。然后,我们将在4.2节中展示flat如何脱机构造FSPN数据。最后,我们将在4.3节讨论FLAT如何更新模型。

4.1 在线概率计算

FLAT可以以一个递归的方式在FSPN中获取任何查询Q的概率。我们首先用一个例子说明概率计算的基本策略,然后给出了详细的算法,并分析了算法的复杂度。

基本策略

如第2节所述,查询Q可以用规范形式表示。明显的,Q代表属性空间中一个超矩形范围它的概率需要计算。在图3中,我们给出了一个查询的例子。
在这里插入图片描述

算法描述:

接下来,我们描述了在线概率计算算法。输入是一个FSPN模型和查询Q,输出Q的概率。按照以下的规则递归地计算概率:
在这里插入图片描述
规则1(第2-3行):在基本情况下,N是一个单叶节点,我们直接在单变量的联合概率分布返回Q的概率。
规则2(第4-11行):如果N是一个和节点(第4-7行),或积节点(第8-11行),使得N1,N2,…,Nt全部为它的孩子节点。 我们可以获得每个孩子所代表的PDF的概率。然后N计算这些概率的加权和(对于和节点)或乘法(对于乘积节点)。
规则3(第12-18行):如果N是一个因式分解节点,分别让LC和RC是它的左右子模型Prt(W)和Prt(H|W)。RC所有的后代是分割或者多叶子节点。让L1,L2…Lt是RC全部的多叶子节点。假设每个分割节点以网格的方式划分属性域空间。那么每一个Li在指定的超矩形范围上维护RC到Li路径上所有的节点的多元PDF。

4.2 离线结构构建

我们给出了在平面离线算法中建立FSPN的详细过程。其一般过程如图4所示。
在这里插入图片描述
以自上而下的方式工作。我们简要扫描其主要程序如下:
在这里插入图片描述

1.将高度相关的属性与其他属性分开(第2-8行):当条件为空的时候,FLAT-Offline首先检测是否存在一组高度相关的H属性,因为FSPN的原理是尽早将它们与其他属性分开。我们通过检查两两之间的相关性来发现H,例如RDC [30],并设定一个阈值。如果H不为空,我们将H设置为分组节点,N的左孩子和右孩子分别递归地调用模型PrTn(An− H)和PrTn(H|An− H)。
2.弱相关属性建模(第9-19行):如果Cn= ∅和H = ∅,我们试图将Prtn(An)分割成小区域,这样An的属性在局部独立。具体地说,如果|An| = 1,N就是一个叶子节点(第10行)。我们称之为Leaf-PDF程序,使用现成的工具来建模单变量PDF Prtn(An)(第11行)。在我们的实现中,我们选择直方图[40]和参数高斯混合函数[41]分别对分类属性和连续属性建模。
否则,我们试图根据它们的成对相关性来划分An为相互独立的子集,如果两个属性的相关值不大于阈值.,则认为它们是独立的。如果An可以被分割成相互独立的子集,我们将N节点设置成一个积节点对每一个子集进行建模。否则,本地独立性不存在,所以我们需要分割数据。我们应用聚类方法进行聚类,比如K-means。同一簇中的记录是相似的,因此对应的PDF变得更平滑,属性更有可能是独立的。
3.建模条件PDF(第21-30行):首先,我们计算所有属性的成对相关性在An和Cn。如果An独立与Cn,N是一个multi-leaf 节点。

4.3 增量更新

当表T改变时,为了在节省更新成本的同时获得较高的估计精度,我们尝试最大程度地保留原始FSPN结构,同时微调其参数以获得更好的拟合。FLAT更新可以在数据库管理系统的后台运行。
我们描述了数据插入的方法,数据删除可以类似的进行。当数据有增加时,通过自上而下的方法修改FLAT,具体地说,对于每个分解节点N,因为条件因子分解在任何情况下都是联合概率密度函数的无损分解,我们可以直接传给它的孩子。对于每个拆分节点,我们通过其拆分条件将更新的每个记录传播给相应的子节点。在每个原始多叶节点L,我们重新检查条件独立性是否仍然成立。如果成立,我们只需更新其多元PDF的参数。否则,我们将其重置为拆分节点并运行行28-30行以进一步划分其域空间。
对于每个和节点,我们在结构构建过程中存储所有聚类的中心点,因此我们可以将增加的每个记录分配给最近的聚类,将其传播给该子聚类,并相应地更新每个子聚类的权重。对于每个积节点,我们还重新检查属性子集之间的独立性是否仍然成立。如果没有,我们重新运行FLAT-Offline的第12–19行来构建FSPN的子结构。否则,我们直接把新增传给它的孩子。对于每个单叶节点,我们更新其单变量的PDF。显然,更新后,生成的FSPN可以准确地拟合PDF。
显然,在数据分布保持不变的情况下,平面更新不会改变原始的FSPN模型。如果数据发生重大变化,例如插入或删除属性,可以通过调用FLAT-Offline来重建FSPN。

五、多表基数估计方法

在本节中,我们将讨论如何将FLAT算法扩展到多表连接查询。我们首先从高层次描述我们的方法,然后详细阐述关键技术。

主要思想

为了克服其他方法的缺点,我们的方法吸收了[16]的关键思想,还建立了一套小型的本地模型。然而,我们在实质上扩展了这种方法,使其更加通用和适用。首先,我们开发了一个新的PDF校正范例来支持更多类型的连接,例如内部或外部和多对多(见下面的技术一)。其次,我们特别优化了基于我们的FSPN模型的概率计算和校正过程(见技术二)。第三,我们开发了数据变化的增量模型更新方法(见技术三)。

算法描述

我们将数据库D和查询Q作为输入,主要程序如下:
1.离线阶段(1-7行):我们首先将D的所有表组织成一棵树J,基于它们的连接(第1行)。最初,J的每个节点都是D的一个表,J的每条边都是两个表之间的连接。本文不考虑自连接和循环连接。基于J,我们可以将D的所有表划分为多个组,以便:表在同一组中高度相关,但在不同组中相关性较弱。具体来说,对于J的每个边(A,B),我们从一些记录中取样,外部联接表,并检查两两属性之间的相关值A和B。如果一些相关值高于阈值,我们在AB表中一起学习模型。所以我们将A,B合并到一个节点。我们重复这个过程,直到没有一对节点需要合并。此后,不同节点之间的概率可以大致假设为独立于它们的完全外部连接表。
分区后,J的每个节点T代表一组一个或多个单独的表。我们在其外部连接表中添加了一些散射系数列,用于PDF校正。细节在下面的技术一中解释。然后根据FLAT-Offilne算法训练FLAT模型。
图5描述了一个带有三个表的示例数据库。Tb和Tc之间是一个多对多的连接,Ta和Tb高度相关,所以他们合并到了节点1。然后我们分别构建了两个FSPN。
在这里插入图片描述
2.在线处理(第8-12行):对于在线查询Q,用E表示Q中涉及到的全部节点。将Q分为Ti上的一个个子查询。根据我们的假设,每个子查询在表上是独立的。我们可以从局部模型中通过一种新的模式有效地校正概率。最后,我们将所有概率相乘,得到最终的基数估计结果。

六、评价结果

我们做了大量的实验来证明我们提出的FLAT算法的优越性。我们首先介绍实验设置,然后在6.1节和6.2节分别报告CardEst算法在单表和多表情况下的评价结果。章节6.3报告更新的效果。最后,在第6.4节中,我们将FLAT集成到Postgres[7]的查询优化器中,并评估端到端的查询优化性能。

基线方法

我们将FLAT与各种有代表性的基数估计算法进行比较,包括:

  1. 直方图:在DBMS中广泛使用的最简单的方法,如SQL Server[29]和Postgres[7]。
  2. Naru:[55]中提出的基于DAR的算法。我们采用了作者在[56]上编写的源代码,并采用了var-skip加速技术[26]。该算法利用5个隐层(512、256、512、128、1024个神经元单元)的DNN来近似pdf文件。抽样大小设置为2000,这是作者的默认值。我们不比较[13]中的类似方法,因为它们的性能很接近。
  3. NeuroCard [54]: Naru在多表情况下的扩展。我们也采用了作者的[31]源代码,并将采样大小设置为8000作为作者的默认值。
  4. BN:基于贝叶斯网络的算法。我们使用基于ChowLiu树[4,12]的实现构建BN结构,因为它的性能比其他的要好[9,51]。
  5. DeepDB:[16]中提出的基于SPN的算法。我们采用作者的[15]源代码,并应用相同的超参数,将RDC独立性阈值设置为0.3,并以至少1%的输入数据分割每个节点。
  6. MaxDiff:该方法使用有损压缩技术[40]在联合PDF中存储所有条目。我们使用[56]源代码库中提供的实现。
  7. 抽样:该方法对大量记录进行统一的抽样,以估计基数。我们将抽样大小设置为数据集的1%。应用于MySQL[42]、MariaDB[46]等数据库管理系统。
  8. KDE:基于核密度估计的CardEst方法。我们已经使用scikit学习模块[28]实现了它。
  9. MSCN:[19]中描述的最先进的查询驱动的基数估计算法。对于每个数据集,我们用与工作负载相同的方式生成的105个查询来训练它。

我们不会与其他算法(如IBJS)进行比较,因为他们的表现已被证实竞争力较低。对于第4.2节中描述的FLAT超参数,我们设置RDC阈值Tl=0.3,Th=0.7分别过滤独立和高度相关的属性。与DeepDB类似,当一个节点包含少于1%的输入数据时,我们也不会拆分它。

评价指标

根据我们在第1节中的讨论,我们将集中讨论三个关键指标,即估计精度、时间效率和存储开销。对于估计精度,我们采用广泛使用的q-error度量[13,16,19,23,25,54,55]定义为:
在这里插入图片描述
它的最优值是1。我们报告每个工作负载的整个q误差分布(50%、90%、95%、99%和100%分位数)。为了节省时间,我们报告了查询延迟和训练时间。对于存储开销,我们报告模型大小。

环境

以上所有算法都是用Python实现的。所有实验都是在CentOS服务器上进行的,该服务器使用Intel Xeon Platinum 8163 2.50GHz CPU, 64核,128GB DDR4主存和1TB SSD。

6.1 单表评价结果

我们使用两个单表数据集,即GAS和DMV。GAS是从UCI数据集[43]获得的真实气体传感数据,包含3,843,159条记录。我们提取信息最丰富的8列(时间,湿度,温度,流量,加热电压,R1, R5和R7),DMV[36]是一个真实世界的车辆登记信息数据集,包含11,591,877元组。我们用和[56]一样的11列。对于每个数据集,我们生成一个包含105个随机生成的查询的工作负载。对于每个查询,我们使用0.5的概率来决定是否应该包含某个属性。如第2节所述,每个属性A的域映射到一个区间,我们对两个值进行均匀抽样l和h。

估计精度

表1报告了不同基数估计算法的q-error分布。它们的精度被评为FLAT ≈Naru>BN>DeepDB>>Sample/MSCN >>KDE >> MaxDiff/Histogram.具体内容如下:
在这里插入图片描述

  1. 全部的:FLAT的估计精度很高。在这两个数据集中,中位数q误差(1.001和1.002)非常接近1,最优值。在GAS中,FLAT达到最高的精度。Naru的精度与FLAT相当,在DMV上略优于FLAT。Naru的高精度源于基于AR的分解和代表pdf文件的大型DNN。
  2. BN和DeepDB的精度比FLAT差。在95%分位数,FLAT比BN表现更好3.6×并且DeepDBby71×在GAS。BN的误差主要来自于它的近似结构。DeepDB似乎无法分离高度相关的属性。因此,对于涉及这些属性的查询,它会导致相对较大的估计误差。
查询延迟

在这里插入图片描述

6.2多表评价结果

我们在IMDB基准数据集上评估了多表情况下的CardEst算法。它在之前的工作[16,23,25,54]中被广泛用于基数估计。我们使用提供的具有70个查询的JOB-light查询工作负载,并使用1500个查询创建另一个更复杂和全面的JOB-ours 工作负载。
JOB-light的模式包含6个表,所有其他表只能与title连接。每个JOB-light查询涉及3-6个表,所有属性上有1-4个过滤谓词。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值