动手学大数据-3社区开源实践

目录

数据库概览:

MaxComput:

HAWQ:

Hologres:

TiDB:

Spark:

ClickHouse:

Apache Calcite 概览

Calcite RBO 

 HepPlanner

优化规则(Rule)

内置有100+优化规则

四种匹配规则

遍历所有的rule,直到没有rule可以被触发

优化速度快,实现简单,但是不保证最优

Calcite CBO 

CBO的工作原理

VolcanoPlanner

应用Rule搜索候选计划

Groupwinner:目前的最优计划 

剪枝(Branch-and-boundpruning):减少搜索空间 

Top-down遍历:选择winner构建最优执行计划 

小结 


数据库概览:

上面的这些数据库 他们都是基于Calcite来做的,下面简单介绍一些:

MaxComput:

它是属于这个volcano跟Cascade框架,volcano框架是一个优化器的一个实现框架,他没有没有具体的代码或者项目,只是描述说你的优化器应该怎么实现

HAWQ:

是使用了一个自研的一个查询优化器,叫Orca,也是属于volcano跟Cascade,然后前面那个是属于JAVA的Orca,后面是属于c++的,大家就看自己喜好的话,可以看这两个不同的不同的项目去学习查询优化器

Hologres:

然后像还有其他像阿里巴巴的Hologress,也就是定位,在他他是直接使用的这个Orca这个开源项目,作为他的优化器

TiDB:

它就是自研的,它也是属于volcano跟Cascade框架

Spark:

像Spark在里面的话,它是自研的,它既有RBO也有CBO,

ClickHouse:

它的优化器比较简单,它只有一些简单的,它没有CBO

…………………………

我们从这里可以看到,主流的大数据优化,大数据系统的查询优化计划,它都包含这个RBO,然后同时我们也可以看到Calcite这个框架是很流行的一个框架,所以后面我就会从这个方面挑上一个项目来给大家简单介绍一下

Apache Calcite 概览

 

Apache Calcite是一个动态数据管理框架。它包含了许多组成典型数据管理系统的经典模块,但省略了一些关键性的功能: 数据存储,数据处理算法和元数据存储库。
  Calcite有意地远离了存储和处理数据的任务。如我们所见,这使得它成为在应用程序和一个或多个数据存储位置和数据处理引擎之间的最佳中间层选择。它同样也是构建数据库的完美基础选择: 只需要在它的基础上添加数据。

提供了:SQL 解析、SQL 校验、SQL 查询优化、SQL 生成以及数据连接查询等典型数据库管理功能。Calcite 的目标是 One size fits all:统一的SQL查询引擎,希望能为不同计算平台和数据源提供统一的查询引擎,并以类似传统数据库的访问方式(SQL 和高级查询优化)来访问不同计算平台和数据源上的数据。下图展示了 Calcite 的架构以及 Calcite 和数据处理系统的交互关系,从图中我们可以看出 Calcite 具有 4 种类型的组件。

最外层是 JDBC Client 和数据处理系统(Data Processing System),JDBC Client 提供给用户,用于连接 Calcite 的 JDBC Server,数据处理系统则用于对接不同的数据存储引擎;

内层是 Calcite 核心架构的流程性组件,包括负责接收 JDBC 请求的 JDBC Server,负责解析 SQL 语法的 SQL Parser,负责校验 SQL 语义的 SQL Validator,以及负责构建算子表达式的 Expression Builder(可以通过 SQL 转换为关系代数,也可以通过 Expression Builder 直接构建);

算子表达式(Operator Expressions)、元数据提供器(Metadata Providers)、可插拔优化规则(Pluggable Rules) 是用于适配不同逻辑的适配器,这些适配器都可以进行灵活地扩展;

查询优化器(Query Optimizer)是整个 Calcite 的核心,负责对逻辑执行计划进行优化,基于 RBO 和 CBO 两种优化模型,得到可执行的最佳执行计划。

 其他特点在于:

模块化,插件化,稳定可靠

支持异构数据模型、关系型、半结构化、流式、地理空间数据

内置RBO和CBO 

 

Calcite RBO 

 HepPlanner

优化规则(Rule)

Pattern:匹配表达式子树

等价变换:得到新的表达式

内置有100+优化规则
四种匹配规则

ARBITRARY/DEPTH_FIRST:深度优先

TOP_DOWN:拓扑顺序

BOTTOM_UP:与TOP_DOWN相反

遍历所有的rule,直到没有rule可以被触发
优化速度快,实现简单,但是不保证最优

 

Calcite CBO 

Calcite CBO成本优化引擎是Apache Calcite中的一个关键组件,它为查询优化提供了一种强大的方式。在关系型数据库管理和查询处理中,查询优化器是核心组件之一,负责确定执行查询的最有效方式。CBO通过评估不同执行计划的成本来选择最优的计划。


CBO的工作原理

Calcite CBO基于成本的优化,通过分析表和索引的统计信息、数据分布以及其他相关信息,对查询执行计划进行评估和选择。它使用启发式算法和统计数据来估算不同执行计划的成本,并根据设定的目标(例如最小化响应时间或资源消耗)来选择最佳计划。 

VolcanoPlanner

基于Volcano/Cascade框架

成本最优假设Memo:存储候选执行计划

Group:等价计划集合

Top-down动态规划搜索 

 

 

应用Rule搜索候选计划

Memo

本质:AND/ORgraph

共享子树减少内存开销 

 

Groupwinner:目前的最优计划 

 

剪枝(Branch-and-boundpruning):减少搜索空间 

可行的Aggregate

•总的cost=500

•自己的cost=150

•孩子节点cost上限=350 

 

Top-down遍历:选择winner构建最优执行计划 

 

小结 

 

1.主流的查询优化器都包含RBO和CBO

2.ApacheCalcite是大数据领域很流行的查询优化器

3.ApacheCalciteRBO定义了许多优化规则,使用pattern匹配子树,执行等价变换4.ApacheCalciteCBO基于Volcano/Cascade框架

5.Volcano/Cascade的精髓:Memo、动态规划、剪枝 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【云岚到家】-day02-客户管理-认证授权

第二章 客户管理 1.认证模块 1.1 需求分析 1.基础概念 一般情况有用户交互的项目都有认证授权功能,首先我们要搞清楚两个概念:认证和授权 认证: 就是校验用户的身份是否合法,常见的认证方式有账号密码登录、手机验证码登录等 授权:则是该用…

html全局遮罩,通过websocket来实现实时发布公告

1.index.html代码示例 <div id"websocket" style"display:none;position: absolute;color:red;background-color: black;width: 100%;height: 100%;z-index: 100; opacity: 0.9; padding-top: 30%;padding-left: 30%; padding-border:1px; "onclick&q…

Mysql 主从复制原理及其工作过程,配置一主两从实验

主从原理&#xff1a;MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器&#xff0c;并在从服务器上执行这些日志中的操作…

C++的auto_ptr智能指针:从诞生到被弃用的历程

C作为一种功能强大的编程语言&#xff0c;为开发者提供了众多便捷的特性和工具&#xff0c;其中智能指针是其重要特性之一。智能指针能够自动管理内存&#xff0c;有效避免内存泄漏等常见问题。然而&#xff0c;并非所有智能指针都尽善尽美&#xff0c;auto_ptr便是其中的一个例…

Spring Security 6.X + JWT + RBAC 权限管理实战教程(上)

前言 本教程基于 Spring Boot 3.x Spring Security 6.x 实现&#xff0c;采用 JWT Redis 的认证方案&#xff0c;结合 RBAC 权限模型&#xff0c;实现了一个完整的权限管理系统。 一、项目依赖配置 关键依赖说明&#xff1a; <!-- SpringWeb --><dependency><…

flutter 常用UI组件

文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…

《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车维修技师》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《汽车维修技师》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;北方联合出版传媒&#xff08;…

大语言模型的语境中“越狱”和思维链

大语言模型的语境中“越狱”和思维链 越狱(Jailbreaking) 含义:在大语言模型的语境中,“越狱”是指用户试图绕过语言模型的安全限制和使用规则,让模型生成违反伦理道德、包含有害内容(如暴力、歧视、恶意软件代码等)的输出。这些安全限制是由模型开发者设置的,目的是确…

【Rust自学】13.2. 闭包 Pt.2:闭包的类型推断和标注

13.2.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发&#xff0c;而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中&#xff0c;我们会讨论 Rust 的一…

Spring篇 解决因为Bean的循环依赖——理论篇

Spring Bean 循环依赖 循环依赖是指两个或多个 Bean 互相依赖&#xff0c;形成一个闭环。例如&#xff0c;A 依赖 B&#xff0c;B 又依赖 A。Spring则 提供了几种方式来解决这种循环依赖问题。 常见的几类 Bean 循环依赖场景 场景1&#xff1a; 解释&#xff1a;由于Bean A依…

三天急速通关Java基础知识:Day1 基本语法

三天急速通关JAVA基础知识&#xff1a;Day1 基本语法 0 文章说明1 关键字 Keywords2 注释 Comments2.1 单行注释2.2 多行注释2.3 文档注释 3 数据类型 Data Types3.1 基本数据类型3.2 引用数据类型 4 变量与常量 Variables and Constant5 运算符 Operators6 字符串 String7 输入…

Excel 技巧10 - 如何检查输入重复数据(★★)

本文讲了如何在Excel中通过COUNTIF来检查输入重复数据。 当输入重复数据时&#xff0c;显示错误提示。 1&#xff0c;通过COUNTIF来检查输入重复数据 比如下面是想检查不要输入重复的学号。 选中C列&#xff0c;点 Menu > 数据 > 数据验证 在数据验证页面&#xff0c…

请求响应-

一.DispatcherServlet 前端控制器 二.HttpServletRequest 请求:获取请求数据 三.HttpServletResponse 响应:设置响应数据 四.简单参数接收 简单参数:参数名与形参变量名相同,定义形参即可接收参数。 如果参数对应不上需要通过RequestParam完成映射,注意事项:加上了参数就必须…

MySQL中的GROUP_CONCAT函数将分组后的多个行值合并成一个字符串,并用指定分隔符连接

文章目录 前言什么是GROUP_CONCAT&#xff1f;基本语法 使用示例示例1: 基本用法示例2: 去重并排序 高级应用应用场景示例注意事项 结论表结构1. Orders 表 (订单表)2. Order_Details 表 (订单详情表) 示例数据Orders 表的数据Order_Details 表的数据 使用 GROUP_CONCAT 的查询…

游戏开发中常用的设计模式

目录 前言一、工厂模式二、单例模式三、观察者模式观察者模式的优势 四、状态模式状态模式的优势 五、策略模式策略模式的优势策略模式与状态模式有什么区别呢? 六、组合模式七、命令模式八、装饰器模式 前言 本文介绍了游戏开发中常用的设计模式&#xff0c;如工厂模式用于创…

【前端】用OSS增强Hexo的搜索功能

文章目录 前言配置 _config.fluid.yml云端实时更新 local-search.xml解决 OSS.Bucket 的跨域问题 前言 原文地址&#xff1a;https://blog.dwj601.cn/FrontEnd/Hexo/hexo-enhance-local-search-with-oss/ 考虑到某著名云服务商提供的云服务器在两年的 99 计划后续费价格高达四…

Redis和MongoDB的区别

前言 在项目选型阶段&#xff0c;MongoDB被选中主要是基于其处理大规模数据集的能力&#xff0c;而当时并未深入探讨其他替代方案。此前&#xff0c;Redis被用于管理少量但访问频繁的热数据。目前&#xff0c;项目采用MongoDB存储百万级数据&#xff0c;预计未来数据量将增长至…

[JavaScript] 深入理解流程控制结构

文章目录 1. **if-else 语句**基本语法&#xff1a;示例&#xff1a;扩展&#xff1a;else if 2. **switch-case 语句**基本语法&#xff1a;示例&#xff1a;注意事项&#xff1a; 3. **for 循环**基本语法&#xff1a;示例&#xff1a;扩展&#xff1a;for-in 和 for-of 4. *…

渗透笔记1

第一天 工具&#xff1a;cs cobalt strike 4.9 / msf kali &#xff08;自带 Ubuntu&#xff09; cs cobalt strike 4.9&#xff1a;server-client server部署在云服务器上&#xff0c;client分别在各地&#xff0c;与server相连接&#xff1b;连接上后就可以共享上线主机。…

C#--在多线程中使用任务并行库(TPL)--15

目录 一.任务并行库的概念以及定义 二.主要特性 三.代码使用示例 1.最基础的Parallel.For使用方式 2.使用 ParallelOptions 来控制并行执行 3.Parallel.ForEach的使用(用于处理集合) 4.带有本地变量的并行循环(用于需要累加或统计的场景) 5.结合Task和Parallel的高级示…