【CMU15-445 Part-10】Sorting and Aggregations

news2024/11/6 0:43:00

Part10-Sorting and Aggregations

Part10-Sorting & Aggregations

Query Plan

查询计划指的是指令或者是数据库系统如何执行一个给定查询的方式。整个查询计划是树形结构或者有向无环图。

https://vvtorres.oss-cn-beijing.aliyuncs.com/image-20230908091819056.png

Logical Plan:先SCAN A,交给join operator,SCAN B,对B进行filter后交给join operator,然后join oper把结果传给projection operator。 使用buffer pool manager来对查询的中间结果进行落盘操作。

External Merge Sort

外部归并排序

bulk loading in B+ Tree:加载大量数据。沿着叶子节点对所有数据进行预排序,然后自下而上构建索引而不是自上而下。

#1 Sorting 将尽可能多的数据块放入内存并对他们进行排序,排完序的结果写回磁盘。#2 Merging 将这些runs合并成更大的runs

2-Way External Merge Sort

两路归并外部排序。

假设数据分成了N个页面,buffer Pool有B个pages。

working Memory:对于一个特定查询来说 working memory就是在进行中间操作的时候被允许使用的内存量。

Pass #0:每次读B个Pages到内存中排完序写入Disk中。

Pass #1,2,3,… 然后两两合并,这样需要至少三个buffer pages,两个输入page 一个输出page。Number of passes = 1+ log_2N IO cost = 2N * passes

Double Buffering Optimization

双缓冲区优化,通过prefetch 预取来最小化I/O成本,当对其他两个page进行合并的时候,可以使用shadow page/buffer来接收下一个run/page

General External Merge Sort

Pass #0: B个buffer pages,产生[N/B]个sorted run, 每个run的大小是B。

Pass #1,2,3 合并B-1轮

不太懂。

第一轮做就地排序,每个page内自己排序,然后后面需要进行合并排序,所以B-1个输入page,1个输出page。

https://vvtorres.oss-cn-beijing.aliyuncs.com/image-20230908162943094.png

Using B+ Trees for Sorting

如果要排序的数据有一个B+ Tree index来组织,而且要排序的key和B+ Tree 的Key是一样的,只适用于clustered B+ Tree(聚簇索引)。

clustered 意味着page中tuple的物理位置和索引中定义的顺序相匹配,可以使用B+ Tree的叶子节点来得到排序后的结果,与物理位置相同。

如果是unclustered B+ Tree Index,叶子节点不保存整条tuple数据,只保存索引对应字段数据。所需求数据的顺序和索引数据排列的顺序没关系。

https://vvtorres.oss-cn-beijing.aliyuncs.com/image-20230908172951806.png

Aggregations

聚合操作,简单来说就是拿到一堆值然后合并在一起生成一个标量值。

sorting做的是大量的循序访问,hashing做的是随机访问。

https://vvtorres.oss-cn-beijing.aliyuncs.com/image-20230908224953227.png

early filter,也就是早做projection,就可以剥离出不需要的列或者属性。

zone maps; pre-computed materialized aggregation

Alternatives to Sorting

排序的代替方案,排序自身过程代价不低,group by distinct内部也是会进行排序操作。

Hashing 聚合操作的方法是:

使用一个临时的(ephemeral transient)的hash table,把DBMS扫描表的结果插入进去,如果都在内存中的话很好办。

External Hashing Aggregate

Phase #1 - Partition:

  • 将tuples拆分放到一个个bucket中,所有具有相同key的tuple都会在同一个分区。
  • 如果写满了写到磁盘

具体的:使用一个hash function h 1 h_1 h1 来进行分桶;

Phase #2 - ReHashing

  • 每个分区构建一个内存中的hash table,然后进行aggregation

具体的:将磁盘的每个分区读到内存然后build a hashtable 根据的是第二个hash function h 2 h_2 h2

这里的partition指的是一个bucket chain,一个chain 可能多个page

h 2 实际 h_2实际 h2实际用来维护聚合函数中的Running_Total?

Untitled

Conclusion

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

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

相关文章

Redis的介绍,安装Redis的方式

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Redis 初识Redis1.1 认识Redis1.2 安装Redis的方式…

18.4 【Linux】systemd-journald.service 简介

只有rsylogd的时候,rsylogd必须要开机完成并执行了rsyslogd这个daemon之后,登录文件才会开始记录。 现在有了systemd之后,它可以主动调用systemd-journald来协助记载登录文件,因此在开机过程中的所有信息,包括启动服务…

网络安全深入学习第四课——热门框架漏洞(RCE— Log4j2远程代码执行)

文章目录 一、log4j2二、背景三、影响版本四、漏洞原理五、LDAP和JNDI是什么六、漏洞手工复现1、利用DNSlog来测试漏洞是否存在2、加载恶意文件Exploit.java,将其编译成class文件3、开启web服务4、在恶意文件Exploit.class所在的目录开启LDAP服务5、监听反弹shell的…

Failed to start sshd.service: Unit sshd.service not found

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

解决:Loading class `com.mysql.jdbc.Driver‘. This is deprecated.

1.在连接MySQL数据库时候会出现这个报错 Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unneces…

民用大中型无人直升机系统飞行性能飞行试验要求

声明 本文是学习GB-T 42856-2023 民用大中型无人直升机系统飞行性能飞行试验要求. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了民用大中型无人直升机系统飞行性能飞行试验的内容、目的、条件、实施、数据处理和 结果评定等要…

学Python的漫画漫步进阶 -- 第九步

学Python的漫画漫步进阶 -- 第九步 九、类与对象9.1 面向对象9.2 定义类9.3 创建对象9.4 类的成员9.4.1 实例变量9.4.2 构造方法9.4.3 实例方法9.4.4 类变量9.4.5 类方法 9.5 封装性9.5.1 私有变量9.5.2 私有方法9.5.3 使用属性 9.6 继承性9.6.1 Python中的继承9.6.2 多继承9.6…

DS线性表之顺序表

前言 上一期我们介绍了什么是数据结构和算法,以及介绍了算法效率问题即什么是时空复杂度~和时空复杂度的计算方式以及常见的时空复杂度的例题详解,本期我们来介绍一下线性表中的顺序表~! 本期内容介绍 什么是线性表? 顺序表的概…

Llama2-Chinese项目:2.2-大语言模型词表扩充

因为原生LLaMA对中文的支持很弱,一个中文汉子往往被切分成多个token,因此需要对其进行中文词表扩展。思路通常是在中文语料库上训练一个中文tokenizer模型,然后将中文tokenizer与LLaMA原生tokenizer进行合并,最终得到一个扩展后的…

Linux网络编程:网络编程套接字

目录 一. 端口号的概念 二. 对于UDP和TCP协议的认识 三. 网络字节序 3.1 字节序的概念 3.2 网络通信中的字节序 3.3 本地地址格式和网络地址格式 四. socket编程的常用函数 4.1 sockaddr结构体 4.2 socket编程常见函数的功能和使用方法 五. UDP协议实现网络通信 5.…

c语言练习题60:模拟实现atoi

模拟实现atoi 代码&#xff1a; #include<assert.h> #include<stdio.h> #include<ctype.h> #include<limits.h> int my_atoi(const char* str) {assert(str ! NULL);if (*str \0){return 0;}//isspace 判断一个字符是不是空格while (isspace(*str)){…

视频监控系统/安防监控/视频AI智能分析:小动物识别算法场景汇总

随着人们对生态环境的关注日益提升&#xff0c;大家对动物保护意识也逐渐增强。旭帆科技智能分析网关小动物识别算法应运而生。除了对保护动物的识别以外&#xff0c;旭帆科技AI智能分析网关还可以识别常见的老鼠等动物&#xff0c;助力明厨亮灶监管&#xff0c;保卫食品安全。…

一键集成prometheus监控微服务接口平均响应时长

一、效果展示 二、环境准备 prometheus + grafana环境 参考博文:https://blog.csdn.net/luckywuxn/article/details/129475991 三、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter

JAVAEE:采用HTML和JavaScript实现几个基本的页面

1.实现效果&#xff1a; <html><title>学生信息确认</title><body><Form>用户名:<input typetext id"usename"><br>密码: <input typepassword id"userpwd"><br>性别:<input typeradio id"…

华为云云耀云服务器L实例评测|手把手教你搭建MySQL数据库

1. 前言 本文将为读者介绍华为云的云耀云服务器L实例&#xff0c;并提供一份详细的手把手教程&#xff0c;帮助您快速搭建MySQL数据库。 MySQL是一款常用的关系型数据库管理系统&#xff0c;搭建与配置它对于许多业务应用和网站来说都是必需的。本文将以华为云【云耀云服务器L实…

模电2023.9.16

1、放大电路模型 根据功能基本可分为四大类&#xff1a; 电压放大、电流放大、互阻放大和互导放大。 注&#xff1a;互阻放大&#xff1a;电流信号转换为电压信号 互导放大&#xff1a;电压信号转换为电流信号 菱形的电源受控源&#xff0c;圆形的为非受控源 如何区分? 看输入…

【入门篇】ClickHouse 的安装与配置

文章目录 0. 前言ClickHouse的安装1. 添加 ClickHouse 的仓库2. 安装 ClickHouse3. 启动 ClickHouse 服务器4. 使用 ClickHouse 客户端 ClickHouse的配置 1. 详细安装教程1.1. 系统要求1.1. 可用安装包 {#install-from-deb-packages}1.1.1. DEB安装包1.1.1. RPM安装包 {#from-r…

C++中的导入include,头文件,extern,main函数入口及相关编译流程

结论&#xff1a; 1&#xff1a;#include就是复制粘贴 2&#xff1a;C编译的时候&#xff0c;在链接之前&#xff0c;各个文件之间实际上没有联系&#xff0c;只有到了链接的阶段&#xff0c;系统才会到各个cpp文件中去找需要的文件&#xff1b; 一&#xff1a;include的作用…

vue2必备知识点

1、生命周期钩子是如何实现的? 生命周期描述beforeCreatevue实例初始化后&#xff0c;数据观测&#xff08;data observer&#xff09;和事件配置之前。data、computed、watch、methods都无法访问。createdvue实例创建完成后立即调用 &#xff0c;可访问 data、computed、wat…

前端JavaScript中MutationObserver:监测DOM变化的强大工具

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. MutationObserver简介 2. MutationObserver的属性 3. MutationObserver的应用场景 3.1 动态内容加载 …