目前的因子分解可以分为独立因子分解和条件因子分解
对于独立因子分解,目前使用的方式使用直方图和SPN网络模型等,但是这些属于有损分解,对于条件因子分解而言,目前使用的是深度自回归网络,贝叶斯网络,这些虽然可以实现无损分解,但是时间成本太高,本文提出两种因子分解,对于弱相关属性,使用独立因子分解,对于强相关属性使用条件因子分解,在这种情况下在准确性和时延之间找到一个最佳平衡。这里对应的是VLDB 2021中的一篇综述。大部分的模型都不能在处理更新的时候找到一个权衡点,所以这里就是目的。
该论文的创新是使用Factorize节点对强弱相关的属性集 分别进行建模,同时使用split节点对强弱相关属性集内部进行建模。
论文的模型整体上分成三个部分,离线训练 在线分析 和增量更新
其中第一部分:离线训练的目的是为了接受输入的表和数据,得到一个模型,然后得到模型。
第二部分是在线分析是接受一个外部的查询Q,当前这部分的查询是作用在T表中,之后调用模型f,求得概率之后再乘以原表的基数作为近似的基数估计。
模型举例
构建FSPN树
分别涉及到以下的名词:
属性集:A=(A1,A2,A3,A4)
每一个属性都视作是r.v
假设现在令A3 和 A4是两个强相关的属性,A1 和 A2是两个弱相关的属性集,
强相关属性集 H=(A3,A4)
弱相关属性集 W =(A1,A2)
这时候 一个技术估计问题就转换成为一个求多元概率的密度模型
-
首先将当前的表作为根节点,之后将强相关和弱相关的属性集分别作为他的根节点,(之后的思路就是分别对其进行分割,迭代)
-
进一步划分N2节点,A1和A2属性互为弱相关,但并非完全独立,对于SPN和衍生的模型而言(Benjamin Hilprecht, Andreas Schmidt, Moritz Kulessa, Alejandro Molina, Kristian Kersting, and Carsten Binnig. 2019. DeepDB: learn from data, not from queries!. In PVLDB.)可以通过合适的聚集和分片使的属性之间局部独立,这个过程被称为“上下文独立”。
举一个例子:以A2<50作为分片的条件,将上一步N2节点的子表再次划分成为T1和T2,在每个T的内部,A1和A2被认为是局部独立,之后对T继续做垂直分片,这时候可以划分L1,L2,L3,L4四个区域,
分成以上四个区域,分别是L1,L2,L3,L4
最后每一个区域L,都只会包含一个属性列,最后被称为uni-leaf节点
上面是当前节点的概率密度的计算公式
其中每一个权值w代表行数和原表T的比值,从公式中可以知道当前的节点是sum节点。
对于N3节点,需要计算P(A3, A4|A1,A2),也就是P(H|W),本文提出根据W和H进行划分,假定划分出子集H1,H2…在同一个H内部,无需考虑W的影响,此时可以认为P(H|W)=P(H),本文成这种方式为上下条件一处contextual condition removal,此时将N3记作split节点。
在当前的例子中,A3和A4通过谓词A1<0.9划分出了两个子表,L5和L6,并由此产生了两个新的包含多个属性列的叶子节点,称之为multi-leaf节点。
以上是FSPN模型的完整构造过程