首页 > 其他分享 >Lecture#10 Sorting & Aggregation Algorithms

Lecture#10 Sorting & Aggregation Algorithms

时间:2023-04-12 22:44:34浏览次数:36  
标签:Sorting run partition Algorithms 哈希 磁盘 Lecture 排序

接下来将学习使用我们现在学习的 DBMS 组件来执行查询。

我们今天要讨论的算法都是基于 Disk 的,即查询的中间结果也需要存储到磁盘中。我们需要使用 Buffer Pool 去实现这些算法,要最大化磁盘连续 I/O。

image-20230412175554237

Query Plan:算子组织成树形结构,数据从叶子节点流向根节点,根节点的输出就是查询的结果,我们将会在下节课讨论数据移动的粒度。

image-20230412175858472

1 Sorting

关系模型是 unsorted 的,即 tuple 不会预先排序。在 ORDER BY, DISTINCT, GROUP BY, JOIN算子中,都有可能需要进行排序。

如果需要排序的数据在内存中可以放下,那么 DBMS 可以使用标准的排序算法 (e.g., 快速排序)。如果放不下,则需要使用external sorting,能够根据需要溢出到磁盘,并且倾向于顺序而不是随机 I/O。

如果查询包含 ORDER BYLIMIT 语句,这就表明 DBMS 只需要扫描一次数据就可以找到前 N 个元素。这就是所谓的 Top-N Heap Sort。堆排序的理想场景是 top-N 元素能存到内存中,这样 DBMS 只需维护一个内存中的堆排序优先队列即可。

2 External Merge Sort

外部归并排序是一个分治排序算法,将数据分割成一些独立的 runs ,单独地对它们进行排序,接着将它们组合成一个更长的 runs 。可以将 runs 存到磁盘中,并在需要的时候读回来。(这里的一个 run 是指一系列 key/value pairs)

算法有两个阶段:

  1. Sorting: 将能放进内存中的小块数据进行排序,并将排序好的数据写回磁盘
  2. Merge: 将两个 (可能是多个,两个的叫做 two-way) 排好序的子文件合并成一个大文件

2.1 Two-way Merge Sort

最基本的版本是二路归并排序。“2” 表示每次将 2 个 runs 合并成一个大 run。

该算法在 Sorting 阶段读取每个页面,对其进行排序,并将排序后的版本写回磁盘。然后,在 Merge 阶段,它使用 3 个缓冲页。它从磁盘中读取两个排序的页面,并将它们合并到第三个缓冲区页面中。每当第三页填满时,它就会被写回磁盘并替换为空页。每组排序的页面称为一个 run。然后,算法递归地将 runs 合并在一起。

标签:Sorting,run,partition,Algorithms,哈希,磁盘,Lecture,排序
From: https://www.cnblogs.com/angelia-wang/p/17311613.html

相关文章

  • Lecture 5 命令行环境
    课后练习任务控制我们可以使用类似psaux|grep这样的命令来获取任务的pid,然后您可以基于pid来结束这些进程。但我们其实有更好的方法来做这件事。在终端中执行sleep10000这个任务。然后用Ctrl-Z将其切换到后台并使用bg来继续允许它。现在,使用pgrep来查找pid并......
  • D. Binary String Sorting
    Problem-D-Codeforces枚举/线性dp枚举做法:枚举每个点,满足条件左边全是0右边全是1取每个点花费中的最小值#include<bits/stdc++.h>usingnamespac......
  • Lecture 4 数据整理
    练习学习一下这篇简短的交互式正则表达式教程.统计words文件(/usr/share/dict/words)中包含至少三个a且不以's结尾的单词个数。这些单词中,出现频率前三的末尾两个......
  • CF EC Round 145 D. Binary String Sorting
    D题意给一个01串,交换两个数需要花费\(10^{12}\),删除某个数需要花费\(10^{12}+1\),问最少花费多少使得串单调不降思路线性dp,\(f[i][0]\)表示前i位构建的串结尾为0,单调......
  • CS61B学习笔记_Lecture4 References, Recursion, and Lists
    还是得先熟悉java的语法规则,准备先回归CS61B了。。。Bits: 计算机将信息储存为内存,用bits(0或1)序列表示这些信息。(一般简写为“b”,注意不要与字节Byte搞混,字节一般用“B......
  • Lecture 3 vim
    完成vimtutor。备注:它在一个80x24(80列,24行)终端窗口看起来最好。直接执行vimtutor下载我们的vimrc,然后把它保存到~/.vimrc。通读这个注释详细的文件(用Vi......
  • P5200 [USACO19JAN]Sleepy Cow Sorting G 题解
    前言:教练要求写的,于是过来补发题解。题目传送门分析容易发现后缀如果是上升的那么就不用动,让前面的通过移动插进来就可以了,第一个答案就是\(n\)减去最长上升后缀的长......
  • Lecture 2 Shell Tools and Scripting
    ​ Lecture2:ShellToolsandScriptinghomework:1.Readmanlsandwriteanlscommandthatlistsfilesinthefollowingmanner读取manls并编写按以......
  • PSRS (Parallel Sorting by Regular Sampling)(基于MPI)
    (一)基于MPI 的程序设计方法并行程序设计可以通过多种方法实现,它们各有特点,并适合于不同的场合。最常用的是共享变量方法和消息传递方法。共享变量方法的主要特点是利......
  • 《Applied Cryptography: Protocols, Algorithms, and Source Code in C》读后感
    作为密码学领域的经典之作,《AppliedCryptography:Protocols,Algorithms,andSourceCodeinC》(应用密码学:协议、算法和C源代码)给我留下了深刻的印象。在读完这本书之......