【CMU15-445 Part-10】Sorting and Aggregations

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.hqwc.cn/news/110452.html

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

相关文章

教育领域数据可视化:点亮知识之路

教育领域一直以来都在不断进步和演变,而数据可视化技术正在为这一领域带来一场革命。在过去的几年里,教育者们越来越意识到,通过将教育数据转化为可视化图表和图形,可以更好地理解学生的表现、需求和趋势,从而提供更好…

开源项目-SeaTunnel-UI数据集成系统

哈喽,大家好,今天给大家带来一个开源项目-SeaTunnel-UI数据集成系统 系统主要有任务配置,任务实例,数据源,虚拟表,用户管理等功能 登录 数据源 mysql数据源配置参数说明 kafka参数配置 mysqlcdc配置参数说明 虚拟表

无涯教程-JavaScript - IFS函数

描述 IFS函数检查是否满足一个或多个条件,并返回与第一个TRUE条件相对应的值。此功能已在Excel 2016中添加。 语法 IFS (logical_test1, value_if_true1, [logical_test2, value_if_true2], [logical_test3, value_if_true3]…) 争论 Argument描述Required/Optionallogical…

【C++】深拷贝和浅拷贝 ② ( 默认拷贝构造函数是浅拷贝 | 代码示例 - 浅拷贝造成的问题 )

文章目录 一、默认拷贝构造函数是浅拷贝1、默认拷贝构造函数2、默认拷贝构造函数是浅拷贝机制 二、代码示例 - 浅拷贝造成的问题 一、默认拷贝构造函数是浅拷贝 1、默认拷贝构造函数 如果 C 类中 没有定义拷贝构造函数 , C 编译器会自动为该类提供一个 " 默认的拷贝构造函…

前端-layui动态渲染表格行列与复杂表头合并

说在前面&#xff1a; 最近一直在用layui处理表格 写的有些代码感觉还挺有用的&#xff0c;顺便记录下来方便以后查看使用&#xff1b; HTML处代码 拿到id 渲染位置表格 <div class"layui-table-body salaryTable"><table class"layui-table" i…

Java大文件分片上传(minio版),超详细

本文使用spring boot 结合minio文件服务做的大文件分片上传&#xff0c;思路&#xff1a;①&#xff1a;初始化文件调用后端接口&#xff0c;后端再调用minio把文件分片成几份&#xff0c;生成每个分片的minio上传url②&#xff1a;把提起分片好的文件依次调用上一把返回的url …

C语言是否快被时代所淘汰?

今日话题&#xff0c;C语言是否快被时代所淘汰&#xff1f;在移动互联网的冲击下&#xff0c;windows做的人越来越少&#xff0c;WP阵营没人做&#xff0c;后台简单的php&#xff0c;复杂的大数据处理的java&#xff0c;要求性能的c。主流一二线公司基本上没多少用C#的了。其实…

防止泄露,保护隐私!如何清除你的谷歌搜索历史记录

按照以下说明学习如何从你的谷歌帐户、谷歌Chrome浏览器、谷歌iOS或Android应用程序或谷歌应用程序中删除你的谷歌历史记录。 如何从你的谷歌帐户中删除搜索历史记录 清除你的谷歌搜索历史并不意味着谷歌实际上会删除你的搜索数据。谷歌仍然会记录你如何以及何时使用某些功能…

Vue3+ElementUI使用

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"viewport" content"initial-scale1.0,maximum-scale1.0,minimum-scale1.0,user-scalable0, widthdevice-width"/><!-- 引入样式 --><lin…

mysql内连接与外连接详解

内连接与外连接 内连接外连接 在数据库中&#xff0c;连接操作是一种把两个或者多个表的记录组合在一起的操作&#xff0c;常用的有内连接&#xff08;Inner Join&#xff09;、外连接&#xff08;Outer Join&#xff09;等。 内连接 内连接&#xff08;Inner Join&#xff0…

算法之排序

文章目录 前言一、二分查找1、正常二分2、二分找第一个出现要查找的数的位置3、在旋转数组中找最小数字二分总结 一、归并排序1、正常归并2、小和问题归并总结 前言 之前我们学习了各种排序算法&#xff0c;今天来让我们看看在线OJ上的题目吧&#xff0c;有哪些排序算法有什么…

Vue.js和TypeScript:如何完美结合

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…