当前位置: 首页 > news >正文

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

背景

基数估计任务是在一个查询执行之前预测其基数,基于代价的查询优化器(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.

相关文章:

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

背景 基数估计任务是在一个查询执行之前预测其基数&#xff0c;基于代价的查询优化器&#xff08;Cost Based Optimizer&#xff09;将枚举所有可能的执行计划&#xff0c;并利用估计的基数选出期望执行代价最小的计划&#xff0c;从而完成查询优化的任务。 然而&#xff0c;…...

Shader->LinearGradient线性渐变着色器详解

XML文件 <com.example.myapplication.MyViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_gravity"center"android:layout_height"400dp"/>自定义View代码 c…...

Unity打包+摄像机组件

转换场景 使用程序集&#xff1a;using UnityEngine.SceneManagement; 切换场景相关代码&#xff1a;SceneManager.LoadScene(1);//括号内可放入场景名称&#xff0c;场景索引等 //Application.LoadLevel(""); 老版本Unity加载场景方法 打包相关 Bundle Identi…...

Git 命令代码管理详解

一、Git 初相识&#xff1a;版本控制的神器 在当今的软件开发领域&#xff0c;版本控制如同基石般重要&#xff0c;而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造&#xff0c;最初是为了更好地管理 Linux 内核源代码。随着时间的推移&#xff0c;Git 凭借…...

游戏引擎学习第78天

Blackboard: Position ! Collision “网格” 昨天想到的一个点&#xff0c;可能本来就应该想到&#xff0c;但有时反而不立即思考这些问题也能带来一些好处。节目是周期性的&#xff0c;每天不需要全程关注&#xff0c;通常只是在晚上思考&#xff0c;因此有时我们可能不能那么…...

Centos9-SSH免密登录配置-修改22端口-关闭密码登录-提高安全性

Centos9-SSH免密登录配置-修改22端口-关闭密码登录 生成秘钥对将公钥信息存进authorized_keys测试登录查询访问记录、比对指纹更换22访问端口关闭账号密码登录生成秘钥对 生成密钥对,指定 备注 和 文件目录命令执行后,默认两次回车,不设置秘钥使用密码ssh-keygen -t rsa -b …...

汇总统计数据--SQL中聚集函数的使用

目录 1、为什么需要汇总数据 2、聚集函数 &#xff08;1&#xff09;AVG函数 &#xff08;2&#xff09;COUNT函数 &#xff08;3&#xff09;MAX和MIN函数 &#xff08;4&#xff09;SUM函数 3、聚集不同值--DISTINCT 4、组合聚集函数 5、小结 博主用的是mysql8 DBMS…...

pdf提取文本,表格以及转图片:spire.pdf

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380; 1. pdfbox1.1导入pdfbox 的maven依赖1.1 提取文本1.2 提取文本表格&#xff08;可自行加入逻辑处理&#xff09;1.3 pdf转换成图片代码&…...

【C#学习笔记】C#中委托

概述 C#的委托是一种类型安全的函数指针&#xff0c;用于引用方法&#xff0c;委托允许方法作为参数传递&#xff0c;或者将方法赋值给委托变量&#xff0c;并通过委托调用方法。 委托类型&#xff1a;委托定义了方法的的签名&#xff08;[方法的参数类型和返回值]&#xff0…...

C#的Task

优先使用Task.Run&#xff0c;除非有定制化需求才用Task.Factory.StartNew Task.Factory.StartNew的TaskScheduler参数颠覆你的认知&#xff1a; var cnt 0;var cancelToken new CancellationTokenSource();await Task.Factory.StartNew(() > {cnt;Debug.WriteLine($&quo…...

企业全文搜索-搜索权限,非侵入文档同步,权限同步 ,扩展字段

简介 企业全文搜索帮助员工高效快速定位所需的信息和资源,搜索权限控制是必须的,原因有二,首先,企业文档,包括公文,流程,技术文档等,带有敏感信息,搜索返回带片段,可能带出敏感信息;其次,若没有权限,用户搜索出来的文档可能不能阅读原文,体验非常差。onesearch有…...

Linux电源管理——CPUidle Framework

目录 前言 一、CPU idle 二、cpuidle framework 相关概念 三、cpuidle core 数据结构 3.1、cpuidle_state 3.2、cpuidle_driver 3.3、cpuidle_device 3.4、cpuidle_governor 四、cpuidle driver初始化流程 4.1、cpuidle driver 初始化方式 4.2、drv->states[0]的初…...

【黑灰产】假钱包推广套路

假钱包推广产业链研究 市面上钱包的主要推广方式&#xff1a; 1&#xff0c;竞价&#xff08;搜索引擎&#xff09;&#xff0c;误导客户为真正官方钱包从而完成下载使用 优点&#xff1a;精准&#xff0c;客户大 缺点&#xff1a;竞价户容易挂&#xff0c;投资大 2&#xff0…...

联想java开发面试题及参考答案

IP 协议是哪一层的? IP 协议(Internet Protocol)属于网络层协议。 网络层主要负责将数据从源节点传输到目标节点,它在整个网络通信体系中起到了承上启下的关键作用。在分层网络模型中,下层(如数据链路层)为网络层提供物理链路的连接和帧传输服务。数据链路层关注的是在相…...

C# 继承(接口)

接口 如果一个类派生与一个接口&#xff0c;它就会执行某些函数。并不是所有的面向对象语言都支持接口。 熟悉COM的开发人员应注意&#xff0c;尽管在概念上C#接口类似于COM接口&#xff0c;但他们是不筒的&#xff0c;底层的结构不筒。比如&#xff0c;C#接口并不派生于IUnko…...

FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )

以Xilinx 公司Virtex-II 系列FPGA 为例&#xff0c;其基本结构由下图所示。它是主要由两大部分组成&#xff1a;可编程输入/输出&#xff08;Programmable I/Os&#xff09;部分和内部可配置&#xff08;Configurable Logic&#xff09;部分。 可编程输入/输出&#xff08;I/Os…...

妙用编辑器:把EverEdit打造成一个编程学习小环境

1 妙用编辑器&#xff1a;把EverEdit打造成一个编程学习小环境 1.1 应用场景 最近在学习Python语言&#xff0c;由于只是学习和练习&#xff0c;代码规模很小&#xff0c;不想惊动PyCharm、VSCode、WingIDE这些重型武器&#xff0c;只想轻快的敲些代码&#xff0c;记事本虽好&…...

ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用

目录 ELK工作原理展示图 一、ElasticSearch介绍&#xff08;数据搜索和分析&#xff09; 1.1、特点 1.2、数据组织方式 1.3、特点和优势 1.3.1、分布式架构 1.3.2、强大的搜索功能 1.3.3、数据处理与分析 1.3.4、多数据类型支持 1.3.5、易用性与生态系统 1.3.6、高性…...

【学习笔记】理解深度学习和机器学习的数学基础:数值计算

深度学习作为人工智能领域的一个重要分支&#xff0c;其算法的实现和优化离不开数值计算。数值计算在深度学习中扮演着至关重要的角色&#xff0c;它涉及到如何在计算机上高效、准确地解决数学问题。本文将介绍深度学习中数值计算的一些关键概念和挑战&#xff0c;以及如何应对…...

【Java回顾】Day5 并发基础|并发关键字|JUC全局观|JUC原子类

JUC全称java.util.concurrent 处理并发的工具包(线程管理、同步、协调) 一.并发基础 多线程要解决什么问题&#xff1f;本质是什么&#xff1f; CPU、内存、I/O的速度是有极大差异的&#xff0c;为了合理利用CPU的高性能&#xff0c;平衡三者的速度差异&#xff0c;解决办法…...

VSCODE使用Echarts组件库(不是vue)

第一步打开Echarts官网 Examples - Apache ECharts 第二步随便点击一个图形点击我圈的按钮 第三步...

DNS解析域名简记

域名通常是由: 权威域名.顶级域名.根域名组成的。 从左往右&#xff0c;级别依次升高&#xff0c;这和外国人从小范围到大范围的说话习惯相关。&#xff08;我们自己是更习惯先说大范围再说小范围&#xff0c;如XX省XX市XX区XX路&#xff09; DNS解析域名时&#xff0c;会先查…...

选择器css

1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…...

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客&#xff0c;作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为&#xff1a; 2.vs…...

ASP.NET Core 实现微服务 -- Polly 服务降级熔断

在我们实施微服务之后&#xff0c;服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败&#xff0c;进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理&#xff1…...

2_CSS3 背景 --[CSS3 进阶之路]

CSS3 中的背景属性提供了许多强大的功能来增强网页设计&#xff0c;包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…...

于交错的路径间:分支结构与逻辑判断的思维协奏

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节内容很多&#xff0c;文章字数达到了史无前例的一万一&#xff0c;我们要来学习分支与循环结构中…...

升级 CentOS 7.x 系统内核到 4.4 版本

问题描述 在 CentOS 7.x 系统中&#xff0c;默认内核版本是 3.10.x&#xff0c;这个版本可能会带来一些与 Docker 和 Kubernetes 兼容性的问题&#xff0c;导致系统性能不稳定或功能异常。为了提高系统的稳定性和兼容性&#xff0c;建议升级到更高版本的内核&#xff0c;例如 …...

MySQL数据导出导入

一、数据导出 1.导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines--default-character-setutf8 --lock-all-tables --add-drop-database -A >db.all.sql 2.导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.…...

【机器学习:八、逻辑回归】

逻辑回归&#xff08;Logistic Regression&#xff09; 1. 逻辑回归的引出 在现实世界中&#xff0c;许多问题都涉及到分类任务。例如&#xff1a; 判断一封邮件是否为垃圾邮件&#xff1b;预测某人是否会患某种疾病&#xff1b;确定图片中是否包含某种特定物体。 这些问题…...

uniapp使用sm4加密

安装&#xff1a;npm install sm-crypto --save 1、在utils下新建crypto.js文件 // sm4 加密 export function encryption(params) {const SM4 require("sm-crypto").sm4const key 0123456789abcdeffedcba9876543212; // 提供的密钥const iv fedcba9876543210012…...

【STM32-学习笔记-1-】GPIO

文章目录 GPIOⅠ、GPIO函数Ⅱ、GPIO_InitTypeDef结构体参数①、GPIO_Mode②、GPIO_Pin③、GPIO_Speed GPIO Ⅰ、GPIO函数 // 将指定的GPIO端口寄存器重置为默认值 void GPIO_DeInit(GPIO_TypeDef* GPIOx);// 将GPIO的备用功能寄存器重置为默认值 void GPIO_AFIODeInit(void);…...

C#中的运算符和类--06

目录 一.运算符 1.赋值运算符 2.算数运算符 3.关系运算符 4.逻辑运算符 5.位运算符 6.三元运算符 7.空合并运算符 8.其他运算符 二.类 1.普通类 2.静态类 3.抽象类 4.密封类 5.部分类 6.泛型类 7.嵌套类 8.记录类 9.接口 一.运算符 1.赋值运算符 定义:赋值…...

【微服务】面试 2、服务雪崩

服务雪崩概念 主要内容&#xff1a;在微服务项目中&#xff0c;微服务间存在远程调用。若某一服务&#xff08;如服务 d&#xff09;出现故障&#xff0c;调用它的服务&#xff08;如服务 a&#xff09;会失败。若调用方持续向故障服务发起请求&#xff0c;由于服务连接数有限且…...

“深入浅出”系列之QT:(6)如何在一个项目中调用另一个项目

在Qt中&#xff0c;如果想在一个项目中调用另一个项目&#xff0c;这通常意味着想要在一个CMake构建的项目中集成或依赖另一个CMake构建的项目。 1‌.子模块或子目录方式‌&#xff1a; 如果另一个项目可以作为一个子模块或子目录包含在当前项目中&#xff0c;可以使用add_sub…...

计算机网络—地址与子网(IPv4)相关知识总结

前言 为了更加清楚的了解该相关知识&#xff0c;下面是发现的一些宝藏博主的博客。 彻底搞懂网络地址、广播地址、主机地址、网关、子网掩码、网络号、主机号 - lipga - 博客园 IP地址&#xff08;分类&#xff09;、子网掩码、网络号、主机号、子网号_网络号,主机号,子网号…...

计算机网络 (36)TCP可靠传输的实现

前言 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过多种机制实现可靠传输&#xff0c;这些机制主要包括连接管理、序列号和确认应答机制、重传机制、流量控制、拥塞控制等。 一、连接管理 TCP使用三次握手&#xff0…...

SQL从入门到实战-2

高级语句 窗口函数 排序窗口函数 例题二十九 select yr,party,votes, rank() over (PARTITION BY yr ORDER BY votes desc) as pson from ge where constituency S14000021 order by party,yr 偏移分析函数 例题三十 select name,date_format(whn,%Y-%m-%d) data, confi…...

基于python的网页表格数据下载--转excel

基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...

用户界面的UML建模13

&#x100084; Concrete Presentation Model 包中所包含的是&#xff0c;在Environment 包中与表示层框架模式中的《apm》类相对应的那些类。 8 结论 本文使用了一个图书馆系统的案例&#xff0c;来论述了关于用户界面的建模。通过使用统一建模语言来对应用系统进行建模&…...

[Python学习日记-75] 计算机基础与网络

[Python学习日记-75] 计算机基础与网络 简介 计算机基础 什么是网络编程 计算机网络 简介 本篇主要介绍的计算机基础是浓缩的&#xff0c;这是因为我们主要学习的是 Python&#xff0c;而 Python 主要是为了开发应用程序的&#xff0c;并不会用它来开发操作系统和嵌入式程序…...

【机器学习:六、特征工程】

1. 特征工程背景意义 在机器学习中&#xff0c;特征工程是模型成功的关键之一。无论算法多么先进&#xff0c;其性能都很大程度上依赖于输入数据的质量。特征工程是指对原始数据进行处理&#xff0c;以创建更适合算法的特征的过程。这一过程在以下方面具有重要意义&#xff1a…...

webpack打包要义

webpack基本 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的工作原理可以概括为以下几个核心步骤&#xff1a; 1. 入口起点&#xff08;Entry&#xff09; Webpack 从配置文件中指定的入口文件&#xff08;Entry Point&#xff09;开始&#xff0c;分析应用…...

Mybatis——Mybatis开发经验总结

摘要 本文主要介绍了MyBatis框架的设计与通用性&#xff0c;阐述了其作为Java持久化框架的亮点&#xff0c;包括精良的架构设计、丰富的扩展点以及易用性和可靠性。同时&#xff0c;对比了常见持久层框架&#xff0c;分析了MyBatis在关系型数据库交互中的优势。此外&#xff0…...

013:深度学习之神经网络

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 深度学习是机器学习中重要的一个学科分支&#xff0c;它的特点就在于需要构建多层且“深度”的神经网络。 人们在探索人工智能初期&#xff0c;就曾设想构建一个用数学方式…...

Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser)

Java 模板变量替换——字符串替换器&#xff08;思路Mybatis的GenericTokenParser&#xff09; 思路字符串替换器 思路 模板变量替换无非是寻找出字符串&#xff08;模板&#xff09;中的特殊标记&#xff0c;用对应的变量进行字符串替换。 提到变量替换&#xff0c;大家第一能…...

蓝桥杯备考:数据结构之栈 和 stack

目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈&#xff1a;没有任何元素 入栈&#xff1a;插入元素消息 出…...

Lambda离线实时分治架构深度解析与实战

一、引言 在大数据技术日新月异的今天&#xff0c;Lambda架构作为一种经典的数据处理模型&#xff0c;在应对大规模数据应用方面展现出了强大的能力。它整合了离线批处理和实时流处理&#xff0c;为需要同时处理批量和实时数据的应用场景提供了成熟的解决方案。本文将对Lambda…...

Vue.js组件开发,AI时代的前端新玩法

AI可不只是写写小说、聊聊天&#xff0c;现在它的触角已经伸到了程序员的代码世界里。特别是前端开发&#xff0c;很多人都在尝试用ChatGPT或者类似的AI工具来写代码&#xff0c;甚至直接生成Vue.js组件。有些人感叹&#xff0c;"写代码的时代是不是要结束了&#xff1f;&…...

标定 3

标定场景与对应的方式 标定板标定主要应用场景: (1)无法获取到执行机构物理坐标值,比如相机固定,执行机构为传送带等 (2)相机存在畸变等非线性标定情况,需要进行畸变校正 (3)标定单像素精度 (4)获取两个相机之间的坐标系关系 标定板操作步骤: (1)确定好拍…...