外排序(External sorting)是指能够处理极大量数据的排序算法。通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是一种“排序-归并”的策略。在排序阶段先读入能放在内存中的数据量,将其排序输出到一个临时文件,依此进行,将待排序数据组织为多个有序的临时文件。尔后在归并阶段将这些临时文件组合为一个大的有序文件,也即排序结果。

外排序的一个例子是外归并排序(External merge sort),它读入一些能放在内存内的数据量,在内存中排序后输出为一个顺串(即是内部数据有序的临时文件),处理完所有的数据后再进行归并。

使用java 文件:

<dependency><groupId>com.google.code.externalsortinginjava</groupId><artifactId>externalsortinginjava</artifactId><version>0.4.5</version>
</dependency>

比如,要对900 MB的数据进行排序,但机器上只有100 MB的可用内存时,外归并排序按如下方法操作:

  • 读入100 MB的数据至内存中,用某种常规方式(如快速排序、堆排序、归并排序等方法)在内存中完成排序。
  • 将排序完成的数据写入磁盘。
  • 重复步骤1和2直到所有的数据都存入了不同的100 MB的块(临时文件)中。在这个例子中,有900 MB数据,单个临时文件大小为100 MB,所以会产生9个临时文件。
  • 读入每个临时文件(顺串)的前10 MB( = 100 MB / (9块 + 1))的数据放入内存中的输入缓冲区,最后的10 MB作为输出缓冲区。(实践中,将输入缓冲适当调小,而适当增大输出缓冲区能获得更好的效果。)
  • 执行九路归并算法,将结果输出到输出缓冲区。一旦输出缓冲区满,将缓冲区中的数据写出至目标文件,清空缓冲区。一旦9个输入缓冲区中的一个变空,就从这个缓冲区关联的文件,读入下一个10M数据,除非这个文件已读完。

这是“外归并排序”能在主存外完成排序的关键步骤 -- 因为“归并算法”(merge algorithm)对每一个大块只是顺序地做一轮访问(进行归并),每个大块不用完全载入主存。

外排序 External sorting相关推荐

  1. (P38-45)数据库系统下-数据库查询实现算法-两趟扫描算法

    文章目录 1.整个关系操作存在的问题 2.两趟算法的基本思路 3.两阶段多路归并排TPMMS 4.更大规模数据集的排序问题-多趟/多阶 5.基于排序的两趟扫描算法 6.基于散列的两趟扫描算法 7.小结 ...

  2. 【数据库原理系列】多趟扫描算法

    两趟扫描算法 基本思路 整个关系操作存在的问题( δ \delta δ(R), γ \gamma γ(R) , τ \tau τ(R)) 理论上,任何一个元组需要与所有元组进行比较,才能确定是否重复, ...

  3. Chpater 10: Sorting

    Internal Sort: Bubble  O(n2) Selection O(n2) Insertion O(n2) Shell O(nlogn) Merge O(nlogn) Heap O(nl ...

  4. 九章算法 第七到九章 预习笔记

    ********************第七章 基于排列.图的DFS预习笔记******************** 本章节的先修知识有: 全排列问题如何使用深度优先搜索来实现?和全子集问题的异同在哪 ...

  5. 数据库系统知识点总结与英文课件翻译

    数据库系统 lec1 数据库系统概述 1.什么是数据库 P3 Data 数据: facts and statistics collected together for reference or ana ...

  6. 外部排序剖析-以磁带为例

    本文总结自<数据结构与算法分析(C++语言描述)>第四版第7章外部排序的内容. 一.基础部分 1. 为什么要区分外部排序与内部排序 所谓外部,是指磁盘.磁带.光盘等外部存储介质:那么内部相 ...

  7. CAUC数据结构与算法期末复习归纳(二)

    CAUC数据结构与算法期末复习归纳(二) 二叉树 二叉树的周游 二叉树的抽象数据类型 深度优先周游二叉树或其子树 广度优先周游二叉树 二叉树的存储结构 二叉树的链式存储结构 二叉搜索树 二叉搜索树的性 ...

  8. 大数据常见面试问题汇总

    目录 第1章 核心技术 1.1 Linux&Shell 1.1.1 Linux常用高级命令 1.1.2 Shell常用工具及写过的脚本 1.1.3 Shell中单引号和双引号区别 1.2 Ha ...

  9. 排序算法总结及面试题

    排序算法总览 排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序.内排序有可以分为以下几类: ...

  10. 线性排序算法分析总结

    线性排序(Linear sort),指的是 时间复杂度为 O(n) 的排序算法.之所以时间复杂度能达到线性,是因为这种排序不是基于比较的,但它的适用场景也有很大的局限性. 线性排序有三种:桶排序.计数 ...

最新文章

  1. (Java)程序员应打破牢笼,展望更高层次的世界
  2. cosx的麦克劳林级数是多少_cosx泰勒展开
  3. [新产品发布|推广] 赠书活动来了,参与有机会得《产品经理那些事儿》图书!...
  4. 优达学城数据分析师纳米学位——P3项目知识点整理及代码分析 xml文件解析
  5. 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
  6. 信息学奥赛C++语言:输出学生序号与成绩
  7. vba 正则表达式前后添加字符_不规则内容提取正则表达式
  8. SNOWNLP情感分析报错解决
  9. 使用 Java 操作 Kubernetes API
  10. 无损更换系统固态硬盘(系统盘克隆)
  11. 「数据游戏」:使用 ARIMA 算法预测三日后招商银行收盘价
  12. 【Linux设置系统时间】
  13. 10个最好的照片分享网站
  14. From scikit-learn to Spark ML
  15. 2020-09-27
  16. commons-collections反序列化漏洞分析——远程代码执行
  17. MMDetection2.17-权重模型转推理模型(pth转onnx)详细步骤及前向推理(Win10、Linux均适用)
  18. Google总部员工生活(最新)
  19. 论文翻译--[TPAMI 2021]Deep Hough Transform For Semantic Line Detection
  20. 黑客攻击技术之高级SQL注入技术(转)

热门文章

  1. 5. wordpress 简单加速 ---gzip
  2. oracle 的数据库、表空间、表是什么关系
  3. Java中反射性能测试
  4. linux 在后台运行数据库导入导出命令
  5. centos6安装PHP5.4
  6. python实例31[自动挂载虚拟盘]
  7. java中null+和null+null的深入理解
  8. SqlServer还原数据库出现“无法在服务器上访问指定的路径或文件”提示的解决办法
  9. 解决出现“未能加载文件或程序集“System.Net.Http.Formatting, Version=5.2.3.0”的问题
  10. SqlServer修改sa的密码