cmu15545笔记-排序和聚合算法(SortingAggregation Algorithms)

news/2024/11/14 17:04:20/文章来源:https://www.cnblogs.com/timothy020/p/18546388

目录
  • 概述
  • 排序
    • 堆排序
    • 外部归并排序
    • 使用索引
  • 聚合操作
    • 排序聚合
    • 哈希聚合

概述

image-20241114154921766

本节和下一节讨论具体的操作算子,包括排序,聚合,Join等。

排序

为什么需要排序操作:

关系型数据库是无序的,但是使用时往往需要顺序数据(Ordered ByG roup ByDistinct)。

主要矛盾:

  • 磁盘很大:要排序的数据集很大,内存空间很小,所有数据不能一次装入内存,需要保留中间结果。
  • 磁盘很慢:不能只看时间复杂度,要充分利用顺序IO。

物化顺序:操作时是直接用具体数据,还是RecordID。

image-20241114160656449

堆排序

如果排序时带有Limit参数,直接用堆排序即可。

image-20241114160105305

外部归并排序

\(N\):总页数

\(B\):缓冲区容纳的页数

下图演示的是N=8,B=3的二路归并排序。

为了演示方便,Pass #0是指对一个页进行排序,得到8个分组,但是实际上可以一次对3个组排序,得到⌈8 / 3⌉ = 3组。

image-20241114161041274

一般地,对于总页数为N,缓冲区为B的外部归并排序有:

  • 分组数(Number of Runs):$⌈N / B⌉ $

  • 轮数(Number of Passes): \(1 + ⌈ log_{B-1} ⌈N / B⌉ ⌉\)

  • 总IO次数(Total IO Cost):\(2N · (\#\ of\ passes)\)

使用索引

上述的排序是基于没有索引时,直接扫描全表进行排序。

如果有索引,数据在索引上天然有序,可以利用索引。

  • 聚簇索引:效果比上述的排序好
  • 非聚簇索引:永远不是个好选择
imageimage

非聚簇索引虽然已经对数据排好序了,但是读取数据是随机IO,顺序读取全表然后进行排序的时间开销与之相比显得不那么沉重了。

聚合操作

怎么选择:如果SQL中有算子需要进行排序操作,如Group ByDistinct,可以采用排序聚合,否则采用哈希聚合。

排序聚合

image-20241114162904557

哈希聚合

思路类似于Map-Reduce。

步骤1:分区

用哈希函数\(h_1\)将数据进行哈希,根据哈希key,将数据划分到不同的哈希桶(bucket),哈希桶是一个输出缓冲区。

在这个过程中,如果某个哈希桶写满了就落盘并刷新。

注意:同一个哈希桶中包含有相同哈希值的数据以及哈希碰撞数据。

如果缓冲区可以容纳\(B\)个页,1个页作为输入缓冲区,\(B-1\)个页作为哈希桶。

image-20241114164403868

步骤2:ReHash

将每一个哈希桶读入内存

  • 对桶中的数据用哈希函数\(h_2\)再进行一次哈希,得到的结果存放在Hash Table中
  • 将Hash Table中的结果追加到结果集(Final Result)中

image-20241114165508821

在ReHash的过程中,会维护一些运行时数据,操作的并不是一个哈希key,而是<GroupKey,RunningVal>操作对。

当要插入一个结果到Hash Table时:

  • GroupKey已存在,更新GroupKey对应的RunningVal
  • GroupKey不存在,添加<GroupKey, RunningVal>

image-20241114170156936

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

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

相关文章

Postman接口测试从入门到精通(二)

十一、Postman批量运行测试用例十二、Postman数据驱动之cSV文件和JSON文件的处理十三、测试必须带请求头的接口常见的请求头:Host 请求的主机地址connection 连接方式Accept 客户端接收到的数据格式 -Requestea-Wih 异步请求 User-Agent 客户端的用户类型 Reterer 来源 …

3路直接输出功能/高抗干扰触控芯片VK3603 ESOP8/3路/3键触摸触控工控触摸检测芯片

产品品牌:永嘉微电/VINKA 产品型号:VK3603 封装形式:ESOP8 概述 VK3603具有3个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有较 高的集成度,仅需极少的外部组件便可实现触摸按键的检测。 提供了3路直接输出功能。芯片内部采用特殊的集成电路,具有高电源电…

语音生成模型 PlayDialog:可生成对话播客、旁白;小米 AI 眼镜将于明年 Q2 发布丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

Assignment pg walkthrough Easy 通配符提权变种

nmap 扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.157.224 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-14 04:18 UTC Stats: 0:00:53 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan Service scan Timing: About 66.67% done; ETC: 0…

变量的存储方式和生存期

变量的存储方式和生存期变量的存储方式和生存期 动态存储方式与静态存储方式 从变量的作用域(即从空间)的角度来观察,变量可以分为全局变量和局部变量 从变量存在的时间(即生存期)来观察:有的变量在程序运行的整个过程都是存在的,而有的变量则是在调用其所在的函数时才临…

Whalestudio助力西南某商业银行数据中台建设 | 实践探索

在数字化转型的浪潮下,银行业对数据的依赖日益加深。为提升数据管理和应用水平,西南某城商行于2022年启动了数据中台建设,采用创新技术手段优化其数据服务体系。 本文将深入探讨该行如何借助Whalestudio平台构建数据中台,以及在实际应用中取得的显著成效。 从需求到选择:数…

详解漏斗模型及如何通过行为设计提升转化率

详解漏斗模型及如何通过行为设计提升转化率 | 人人都是产品经理 https://www.woshipm.com/pd/1695380.html 详解漏斗模型及如何通过行为设计提升转化率2018-12-05 3 评论63515 浏览267 收藏12 分钟 漏斗模型,是一种数据分析方式,是一个线性流程,更是一种普遍适用的方法论,或…

【FMC155A】基于VITA57.1标准的2路500MSPS/1GSPS/1.25GSPS 14位AD采集FMC子卡模块(交流耦合)

​板卡概述 FMC155A是一款基于VITA57.1标准的,实现2路14-bit、500MSPS/1GSPS/1.25GSPS 采样率交流耦合ADC同步采集FMC子卡模块。该模块遵循VITA57.1规范,可直接与FPGA载卡配合使用,板卡ADC器件采用ADI的AD9680芯片,该芯片具有两个模拟输入通道和两个JESD204B输出数据通道对…

在华为开发者空间,简单几步带你实现AI风格化编程

通过调用ModelArts上的动漫头像制作应用,将头像图片转化为动漫风格的头像图片。本文分享自华为云社区《【开发者空间实践指导】基于FunctionGraph的AI风格化编程》,作者:开发者空间小蜜蜂。 一、 案例介绍 本实验基于FunctionGraph和ModelArts的智能头像动漫化处理应用。通过…

皮带跑偏识别智慧矿山一体机皮带运行状态识别如何与EasyCVR平台搭建煤矿矿井安全监控系统?

在煤矿行业,安全始终是最为关键的议题。随着智能化技术的发展,智慧矿山一体机与EasyCVR平台的结合为煤矿矿井安全监控系统提供了一种全新的解决方案。这种集成化的系统不仅能够实现对煤矿生产过程的实时监控和管理,还能提高矿山的安全性和生产效率,同时降低人工巡检的成本和…

vmstat的使用

1.用法 vmstat [-a] [-n] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V] -a:显示活跃和非活跃内存 -f:显示从系…

PNP和NPN三极管区别

主要区别是电流流向和电压不同:1. PNP管子是发射极流入后从基极和集电极流出,NPN管子是基极和集电极流入从发射极流出。 2. PNP管子工作在放大区时电压是,Ue>Ub>Uc,NPN管子工作在放大区时电压时Uc>Ub>Ue。 3. PNP是共阴极,即两个PN结的N结相连做为基极,…