论文导读 | 数据库系统中基于机器学习的基数估计方法

背景

基数估计任务是在一个查询执行之前预测其基数,基于代价的查询优化器(Cost Based Optimizer)将枚举所有可能的执行计划,并利用估计的基数选出期望执行代价最小的计划,从而完成查询优化的任务。

然而,传统的基数估计方法,例如PostgreSQL基于直方图(Histogram)的方法,往往采用简单的独立性假设、均匀假设,用有限的统计信息来预测查询的基数,导致了较大的基数估计误差。事实上,现实中的数据是复杂的、富有关联的,传统的基数估计方法往往不能刻画数据的复杂分布,产生巨大的基数估计误差从而诱发大量的次优计划甚至灾难性计划。

为此,研究者们近年来将目光投放于基于机器学习的查询优化方法,利用机器学习的基数,来完成基数估计这个传统方法难以很好解决的问题。现有的基于机器学习的方法主要可以分为如下两大类:

  • **Query-driven:即查询驱动。**直接学习查询特征到其基数的映射,i.e. $ f_\Theta(Q) \to \text{Card} 。通常是一个回归模型,但需要大量的查询及其真实基数作为训练集 。通常是一个回归模型,但需要大量的查询及其真实基数作为训练集 。通常是一个回归模型,但需要大量的查询及其真实基数作为训练集{ <Q, \text{Card}>}$。
  • **Data-driven:即数据驱动。**与查询驱动的思想不同,数据驱动并不直接学习查询的基数,而是学习底层数据的分布,并用这个分布来回答查询的基数。例如,一个具有属性 { A 1 , A 2 , ⋯ , A n } \{A_1, A_2, \cdots, A_n\} {A1,A2,,An}的表 T T T,可以看作是定义在 Π i = 1 n d o m ( A i ) \Pi_{i=1}^n dom(A_i) Πi=1ndom(Ai) 上的多元概率分布 P T ( A 1 , A 2 , ⋯ , A n ) P_T(A_1, A_2, \cdots, A_n) PT(A1,A2,,An),用机器学习模型来拟合此分布,得到 P ^ T ( A 1 , A 2 , ⋯ , A n ) \hat{P}_T(A_1, A_2, \cdots, A_n) P^T(A1,A2,,An)。之后,原表 T T T上的带有选择谓词的查询,可以看作在 P ^ T \hat{P}_T P^T 上的积分来近似估计基数。

讨论的范围:当然了,目前主要的基数估计研究主要关注于如下形式的Select-Project-Join查询。多表连接最基本的查询单元、也是查询优化中最为困难的部分之一。

SELECT COUNT(*)
FROM T1, T2, ..., Tm
WHERE Join condition AND Filtering predicates

相关文献整理如下。下面,将从中选部分代表性的工作介绍。

CategoryEstimatorModel
QueryMSCN[1]Multi-Set Convolutional Network
QueryRobust-MSCN[2]Multi-Set Convolutional Network + Query Masking + Join Bitmap
QueryJGMP[3]Join Graph Message Passing Neural Network
QueryALECE[4]Multi-head Attention
DataDeepDB[5]Sum Product Network
DataFLAT[6]Factorized Sum Product Network
DataNeuroCard[7]Deep Autoregressive Model
DataBayesCard[8]Bayesian Network
DataFactorJoin[9]Bayesian Network + Join Histogram
DataASM[10]Deep Autoregressive Model + Join Histogram

查询驱动的方法

MSCN [1, CIDR’ 19]

这是较早的一篇工作,用查询的特征来预测基数,是查询驱动的代表性工作。具体来说,该方法将一个连接查询 Q Q Q表示为一个三元组<T_Q, J_Q, F_Q>,分别表示查询 Q Q Q涉及的表的集合、连接条件的集合、过滤谓词的集合。其中,表、连接的编码都可以通过one-hot完成,谓词的用 <col,op,val>分别编码。同时,为了增强模型的能力,MSCN还引入了bitmap编码。即,在每个表上采样若干行,用过滤条件进行过滤,将保留(1)过滤(0)信息编码到bitmap作为输入特征。

ALECE[4, VLDB’ 23]

该方法的着眼点是动态场景,即底层数据会被更新,因此模型必须有感知底层数据变化的能力。为此,该方法将底层数据的直方图作为特征交给模型,并且直方图会随着底层数据的更新而更新,使得模型具备了动态场景下完成较好的基数估计的可能性。

数据驱动的方法

DeepDB [5, VLDB’ 20]

DeepDB使用了Sum-Product Networks来学习数据的联合分布 P ( A 1 , A 2 , ⋯ , A n ) P(A_1, A_2, \cdots, A_n) P(A1,A2,,An)。该方法训练得到的数据结构如图©所示。其中,Sum node(+)将表横向切分,这部分是信息无损的;Product node假设表的某部分列是相互独立的,然后纵向切分,这部分应用了独立性假设。最后,叶子结点是一列,用直方图来刻画该列的分布。有了这个训练好的数据结构,关于求解概率、条件期望等问题都可以在这个Sum-Product完成,从而能够很好的支持单表带选择谓词的基数估计。关于连接查询,DeepDB的方法是预计算一些表(文中最多3个表)的全外连接,设计更多的表的查询应用独立性假设完成,技术细节请参考原文。

NeuroCard [7, VLDB’ 20]

使用了深度自回归模型来建模数据分布,该方法分为两部分:

  • 如何建模表的分布?即上述的自回归建模,这部分工作在作者的前序工作[12, VLDB’ 19]中完成。
  • 如何处理连接查询?这是本文的任务。方法的思想是直接建模所有表的全外连接的分布。注意到全外连接包含了所有表的信息、所有可能的连接的信息。只不过有一些行因为外连接在结果中多次重复,这只要引入一些额外的列记录重复度(fanout)即可,技术细节参考原文。

下面重点介绍如何建模表的分布、如何从自回归模型中估计概率密度(即过滤谓词的选择度)。

训练

和NLP中的语言模型类似,将"Tuple"视为"sentence",将"value"视为"token",用交叉熵损失训练。

概率密度估计

训练好后,单点的概率密度很容易估计,直接将所有条件概率乘起来就可以。区间密度的估计,文中介绍了渐进式采样高效完成。

FactorJoin [9, SIGMOD’ 23]

连接查询的估计对之前的Data-driven的方法仍然非常具有挑战性。先前的方法依赖于预计算一些表的外连接,用模型来建模这些外连接,训练成本较高,并且如果新来的连接查询并不完全被已有模型包含,需要用独立性假设将这个查询拆开,也不尽人意。

FactorJoin提出了一个全新的基数估计框架:只需要用模型建模单表的分布,连接查询借助连接键的直方图来回答。下面这个例子介绍了FactorJoin的想法。要估计 A A A B B B两个表的连接查询,可以先执行两个表上各自的过滤条件,得到过滤后的表为 A ∣ Q ( A ) A|Q(A) AQ(A) B ∣ Q ( B ) B|Q(B) BQ(B)。之后,统计过滤后的表的连接键在表中出现的次数(下图中的Value count),将相同键的计数对应相乘再求和即可:
∣ Q ∣ = ∑ v ∈ d o m ( A . i d ) P A ( A . i d = v ∣ Q ( A ) ) ∗ ∣ Q ( A ) ∣ ∗ P B ( B . A i d = v ∣ Q ( B ) ) ∗ ∣ Q ( B ) ∣ |Q| = \sum_{\substack{v \in dom(A.id)}}P_A(A.id=v|Q(A))*|Q(A)|*P_B(B.Aid=v|Q(B))*|Q(B)| Q=vdom(A.id)PA(A.id=vQ(A))Q(A)PB(B.Aid=vQ(B))Q(B)
在这里插入图片描述

注意到,单表上的条件概率是能够用单表的模型回答的。但是,最外面的求和号遍历所有可能的连接键,其复杂度不亚于做连接了,所以文中用Join-key Histogram,将连接键聚集到若干bucket里面,牺牲了准确性,但使得外层求和号变成了对bucket的数目求和,从而能够进行求解。

总结一句,FactorJoin实现了仅对单表建模、并利用连接键的直方图来完成对多表连接查询的基数估计。这种想法训练快、模型轻量,同时精度也不错,非常practical。后续工作[10, SIGMOD’ 24]是在这个框架下的完善,[11, SIGMOD’ 24]将这个方法应用到了字节跳动的数据仓库中的基数估计。

总结

A good cardinality estimator should be effective, efficient, and practical for deployment

  • Query-driven

✅ Lightweight, fast inference speed

❌ Requires a lot of training data, long data collection process, not practical

❌ Out-of-distribution problem, doesn’t generalize well

🤔 The potential of pretraining? [13, 14]

  • Data-driven

✅ Usually more accurate than query driven methods (at least according to recent works)

✅ Much less setup time (no need to collect queries and cardinalities)

✅ Generalizes well, no out-of-distribution problem

😞 Challenging to capture cross-join correlation, trade-off between accuracy, training time, time/space efficiency

参考文献

[1] Andreas Kipf, Thomas Kipf, Bernhard Radke, Viktor Leis, Peter A. Boncz, Alfons Kemper: Learned Cardinalities: Estimating Correlated Joins with Deep Learning. CIDR 2019.

[2] Parimarjan Negi, Ziniu Wu, Andreas Kipf, Nesime Tatbul, Ryan Marcus, Sam Madden, Tim Kraska, Mohammad Alizadeh. Robust Query Driven Cardinality Estimation under Changing Workloads. VLDB 2023.

[3] Silvan Reiner, Michael Grossniklaus: Sample-Efficient Cardinality Estimation Using Geometric Deep Learning. VLDB 2023.

[4] Pengfei Li, Wenqing Wei, Rong Zhu, Bolin Ding, Jingren Zhou, Hua Lu: ALECE: An Attention-based Learned Cardinality Estimator for SPJ Queries on Dynamic Workloads. VLDB 2023.

[5] Benjamin Hilprecht, Andreas Schmidt, Moritz Kulessa, Alejandro Molina, Kristian Kersting, Carsten Binnig: DeepDB: Learn from Data, not from Queries! VLDB 2020.

[6] Rong Zhu, Ziniu Wu, Yuxing Han, Kai Zeng, Andreas Pfadler, Zhengping Qian, Jingren Zhou, Bin Cui: FLAT: Fast, Lightweight and Accurate Method for Cardinality Estimation.

[7] Zongheng Yang, Amog Kamsetty, Sifei Luan, Eric Liang, Yan Duan, Xi Chen, Ion Stoica: NeuroCard: One Cardinality Estimator for All Tables. VLDB 2020.

[8] Ziniu Wu, Amir Shaikhha, Rong Zhu, Kai Zeng, Yuxing Han, Jingren Zhou: BayesCard: Revitilizing Bayesian Frameworks for Cardinality Estimation. ArXiv 2020.

[9] Ziniu Wu, Parimarjan Negi, Mohammad Alizadeh, Tim Kraska, Samuel Madden: FactorJoin: A New Cardinality Estimation Framework for Join Queries. SIGMOD 2023.

[10] Kyoungmin Kim, Sangoh Lee, Injung Kim, Wook-Shin Han: ASM: Harmonizing Autoregressive Model, Sampling, and Multi-dimensional Statistics Merging for Cardinality Estimation. SIGMOD 2024.

[11] Yuxing Han, Haoyu Wang, Lixiang Chen, Yifeng Dong, Xing Chen, Benquan Yu, Chengcheng Yang, and Weining Qian. ByteCard: Enhancing ByteDance’s Data Warehouse with Learned Cardinality Estimation. SIGMOD 2024.

[12] Zongheng Yang, Eric Liang, Amog Kamsetty, Chenggang Wu, Yan Duan, Xi Chen, Pieter Abbeel, Joseph M. Hellerstein, Sanjay Krishnan, Ion Stoica. Deep Unsupervised Cardinality Estimation. VLDB 2019.

[13] CardBench: A Benchmark for Learned Cardinality Estimation in Relational Databases. Arixv 2024.

[14] PRICE: A Pretrained Model for Cross-Database Cardinality Estimation. Arxiv 2024.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/67696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D扫描建模有哪些优势和劣势?

3D扫描建模作为一种先进的数字化手段&#xff0c;在多个领域展现出了巨大的潜力和价值&#xff0c;但同时也存在一些劣势。以下是对3D扫描建模优势和劣势的详细分析&#xff1a; 3D扫描建模的优势 高精度数据采集&#xff1a; 三维扫描技术能够以极高的精度获取物体的三维数…

网络安全 信息收集入门

1.信息收集定义 信息收集是指收集有关目标应用程序和系统的相关信息。这些信息可以帮助攻击者了解目标系统的架构、技术实现细节、运行环境、网络拓扑结构、安全措施等方面的信息&#xff0c;以便我们在后续的渗透过程更好的进行。 2.收集方式-主动和被动收集 ①收集方式不同…

MBM指尖六维力触觉传感器:高灵敏度、低漂移,精准掌控力学世界

MBM指尖六维力触觉传感器是一种专为机器人设计的高性能传感器。它通过集成三轴力和三轴力矩的感知能力&#xff0c;能够精准捕捉复杂的力学信息。传感器采用MEMS与应变体复合测量技术&#xff0c;具备数字输出功能&#xff0c;显著降低漂移并减少安装偏移的影响。其紧凑轻便的设…

用 Python 绘制可爱的招财猫

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​​​ ​​​​​​​​​ ​​​​ 招财猫&#xff0c;也被称为“幸运猫”&#xff0c;是一种象征财富和好运的吉祥物&#xff0c;经常…

docker常用命令及dockerfile编写

docker常用命令及dockerfile编写 1.docker常用命令1.1镜像相关1.2容器相关1.3数据卷1.4网络模式 2.Dockerfile3.Dockerfile示例 1.docker常用命令 1.1镜像相关 镜像相当于是一个模板&#xff0c;可以实例化出很多个容器&#xff1b; #查看docker版本 docker -v#查看docker默…

2025新年源码免费送

2025很开门很开门的源码免费传递。不需要馒头就能获取4套大开门源码。 听泉偷宝&#xff0c;又进来偷我源码啦&#x1f44a;&#x1f44a;&#x1f44a;。欢迎偷源码 &#x1f525;&#x1f525;&#x1f525; 获取免费源码以及更多源码&#xff0c;可以私信联系我 我们常常…

springboot + vue+elementUI图片上传流程

1.实现背景 前端上传一张图片&#xff0c;存到后端数据库&#xff0c;并将图片回显到页面上。上传组件使用现成的elementUI的el-upload。、 2.前端页面 <el-uploadclass"upload-demo"action"http://xxxx.xxx.xxx:9090/file/upload" :show-file-list&q…

如何用 ESP32-CAM 做一个实时视频流服务器

文章目录 ESP32-CAM 概述ESP32-S 处理器内存Camera 模块MicroSD 卡槽天线板载 LED 和闪光灯其他数据手册和原理图ESP32-CAM 功耗 ESP32-CAM 引脚参考引脚排列GPIO 引脚哪些 GPIO 可以安全使用&#xff1f;GPIO 0 引脚MicroSD 卡引脚 ESP32-CAM 的烧录方式使用 ESP32-CAM-MB 编程…

Virgo:增强慢思考推理能力的多模态大语言模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

照片做成图书小程序开发制作介绍

照片做成图书小程序系统&#xff0c;主要是让用户直接通过小程序选择需要做成书的类型和照片排版布局模板&#xff0c;以及上传照片的数量。照片上传完成后&#xff0c;生成模板图片样式进行预览或编辑修改。修改完成全部保存。保存后生成完整的照片书进行预览没问题&#xff0…

《Spring Framework实战》10:4.1.4.2.详细的依赖和配置

欢迎观看《Spring Framework实战》视频教程 集合 <list/>、<set/>、<map/>和<props/>元素分别设置Java集合类型list、set、map和properties的属性和参数。以下示例显示了如何使用它们&#xff1a; <bean id"moreComplexObject" class&qu…

花生好坏缺陷识别数据集,7262张图片,支持yolo,coco json,pasical voc xml格式的标注,识别准确率在95.7%

花生好坏缺陷识别数据集,7262张图片&#xff0c;支持yolo&#xff0c;coco json&#xff0c;pasical voc xml格式的标注&#xff0c;识别准确率在95.7% 数据集分割 训练组87&#xff05; 6353图片 有效集8% 606图片 测试集4% 303图片 预处理 自动定…

WebLogic安全基线

WebLogic安全基线 一、 用户权限1 、检查weblogic 的启动用户2 、用户权限整改3 、使用普通用户重启weblogic 二、账户共用1 、检查weblogic 控制台的账户2 、账户共用整改3 、测试登录weblogic 控制台新账户 三、 账户清理1 、检查weblogic 控制台的账户2 、帐户清理整改 四、…

react-quill 富文本组件编写和应用

index.tsx文件 import React, { useRef, useState } from react; import { Modal, Button } from antd; import RichEditor from ./RichEditor;const AnchorTouchHistory: React.FC () > {const editorRef useRef<any>(null);const [isModalVisible, setIsModalVis…

TDv2:一种用于离线数学表达式识别的新型树形结构解码器

TDv2:一种用于离线数学表达式识别的新型树形结构解码器 本文提出了一种针对手写数学表达式识别(HMER)任务的新型树形解码器(TDv2) ,旨在充分利用数学表达式的树结构标签进行更有效的建模和预测。相较于传统的LaTeX字符串解码器,该模型通过采用一个节点分类模块和一个分…

银行信贷管理系统flask

完整源码项目包获取→点击文章末尾名片&#xff01;

WordPress静态缓存插件WP Super Cache与 WP Fastest Cache

引言 WordPress是一款开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;最初作为博客平台开发&#xff0c;现已发展成为一个功能强大的建站工具&#xff0c;支持创建各种类型的网站&#xff0c;包括企业网站、在线商店、个人博客等。它具有用户友好的界面、丰富的插…

onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制

文章目录 1. 页面跳转方式2. 你的场景分析3. 页面生命周期4. 总结5. 建议 在微信小程序中&#xff0c;页面跳转时&#xff0c; onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制。以下是详细说明&#xff1a; 1. 页面跳转方式 微信小程序提供了多种页面…

【深度学习】通俗理解偏差(Bias)与方差(Variance)

在统计学习中&#xff0c;我们通常使用方差与偏差来衡量一个模型 1. 方差与偏差的概念 偏差(Bais)&#xff1a; 预测值和真实值之间的误差 方差(Variance)&#xff1a; 预测值之间的离散程度 低偏差低方差、高偏差低方差&#xff1a; 图中每个点表示同一个模型每次采样出不同…

生态水文研究中的机器学习与数学建模方法选择

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…