首页 > 编程语言 >cmu15545笔记-排序和聚合算法(Sorting&Aggregation Algorithms)

cmu15545笔记-排序和聚合算法(Sorting&Aggregation Algorithms)

时间:2024-11-14 16:59:29浏览次数:1  
标签:Sorting 聚合 Aggregation 索引 Algorithms 哈希 缓冲区 排序 数据

目录

概述

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)\)

使用索引

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

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

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

非聚簇索引虽然已经对数据排好序了,但是读取数据是随机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

标签:Sorting,聚合,Aggregation,索引,Algorithms,哈希,缓冲区,排序,数据
From: https://www.cnblogs.com/timothy020/p/18546388

相关文章

  • 第四届算法、微芯片与网络应用国际会议(AMNA 2025) 2025 4th International Conference
    重要信息官网:https://ais.cn/u/vEbMBz......
  • Study Plan For Algorithms - Part49
    1.交错字符串给定三个字符串s1、s2、s3,请验证s3是否是由s1和s2交错组成的。两个字符串s和t交错的定义与过程如下,其中每个字符串都会被分割成若干非空子字符串:s=s1+s2+...+snt=t1+t2+...+tm|n-m|<=1交错是s1+t1+s2+t2+s3+t3......
  • Sorting a Grid
    怎么洛谷又没了。怕下次又忘了所以写。习惯了谎话,早已分不清真假。不妨给D的每一行染一个颜色,那么C每一行的是一种颜色即可。可以发现有\(n\)种颜色,每种颜色数量为\(m\)。每一行颜色不是一样的。考虑B如何一定合法。显然每一列不能有重复元素,等价于每一列有m种......
  • CRICOS Data Structures and AlgorithmsHash Tables
    DataStructuresandAlgorithmsHashTablesPage1of3CRICOSProvideCode:00301J Note:hashArraystoresthekey,valueandstate(used,free,orpreviously-used)ofeveryhashEntry.WemuststoreboththekeyandvaluesinceweneedtocheckhashArrayto......
  • comp10002 Foundations of Algorithms
    comp10002 Foundations of AlgorithmsSemester 2,2024Assignment 2LearningOutcomesInthisproject,youwilldemonstrateyour understanding ofdynamic memory and linked data structures (Chap- ter 10) and extend your program design, testi......
  • Study Plan For Algorithms - Part48
    1.不同的二叉搜索树II给定一个整数n,请生成并返回所有由n个节点组成且节点值从1到n互不相同的不同二叉搜索树。classSolution:defgenerateTrees(self,n:int)->List[Optional[TreeNode]]:ifn==0:return[]returnself.g......
  • Study Plan For Algorithms - Part47
    1.复原IP地址有效IP地址正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。给定一个只包含数字的字符串s,用以表示一个IP地址,返回所有可能的有效IP地址,这些地址可以通过在s中插入'.'来形成。classSolution:defrestoreI......
  • Study Plan For Algorithms - Part41
    1.搜索旋转排序数组II已知存在一个按非降序排列的整数数组nums,数组中的值不必互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开......
  • Study Plan For Algorithms - Part42
    1.删除排序链表中的重复元素给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。classSolution:defdeleteDuplicates(self,head:Optional[ListNode])->Optional[ListNode]:ifnothead:returnhe......
  • CRICOS Data Structures and Algorithms Trees
    DataStructuresandAlgorithmsTreesPage1of3CRICOSProvideCode:00301JNote:DSATreeNodehasalreadybeenwrittenforyou,butyou’llneedtounderstandandtestit.Thecodeforfind()wasalreadyimplementedforyou-insert()anddelete()are......