大数据小内存排序问题如何巧妙解决

 更新时间:2025年01月27日 09:30:46   作者:思wu邪  
文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限

大数据小内存排序问题,很经典,很常见,类似的还有比如 “如何对上百万考试的成绩进行排序” 等等。

三种方法:

  • 数据库排序(对数据库设备要求较高)
  • 分治法(常见思路)
  • 位图法(Bitmap)

方法概要

  • 数据库排序(对数据库设备要求较高)

    操作:将数据全部导入数据库,建立索引,数据库对数据进行排序,提取出数据。
    特点:操作简单, 运算速度较慢,对数据库设备要求较高。

  • 分治法(常见思路)

    操作:操作与归并排序的思想类似,都是分治。

    将数据进行分块,然后对每个数据块进行内部的排序(假如是对int形数据升序)。

    和归并排序类似,每个数据块取第一个数据(当前块的最小数据),然后比较取出的数据,取其最小加入结果集。

    重复2操作,直到取完所有数据,此时排序完毕。

    特点:

  • 位图法(Bitmap)

    操作:基本思想就是利用一位(bit)代表一个数字,例如第 3 位上为 1,则说明 3 这个数字出现过,若为0,则说明 3 这个数字没有出现过。很简单~

    ​ java.util 封装了 BitSet 这样一个类,是位图法的典型实现。

    特点:

    • 可读性差(不是一般的差 🤔)

    • 位图存储的元素个数虽然比一般做法多,但是存储的元素大小受限于存储空间的大小。要想定义存储空间大小就需要实现知道存储的元素到底有多少

    • 对于有符号类型的数据,需要用 2 位来表示,比如 第 0 位和第 1 位表示 0 这个数据,第 2 位和第 3 位表示 1 这个数据......,这会让位图能存储的元素个数,元素值大小上限减半

    • 只知道元素是否出现,无法知道出现的具体次数

到此这篇关于大数据小内存排序问题如何巧妙解决的文章就介绍到这了,更多相关大数据小内存排序问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论