1、大顶堆、小顶堆
特别适合topN问题,如求海量日志中最大的100个数。既然是海量数据,那么内存中一下子无法加载所有的数据集,此时可以先读取海量数据中的100个数,建立数据集为100的小顶堆(小顶堆的对顶比所有元素都小),然后依次往堆结构中读取数字,调整堆,使其保持小顶堆,最后得到top100的最大数。
2、hash映射进行分治,然后归并
hash映射按照数据特征把海量数据变的不海量,然后分别处理各段数据,再归并处理。例如:给定两个文件,各存放50亿个url,让你找出两个文件中共同的url,则可以根据url的特征,将两个文件分别映射到上千个小文件中,只要保证两个文件用的相同的hash映射方法,那么相同的url映射后一定在相同的小文件中,所以逐一比较各个小文件中的url,然后归并即可。
3、hash统计
以特征为key值利用hash表进行统计,比如,求一本书中26个字母出现的个数,可以以26个字母分别为key值,进行hash统计即可。
4、bloom filter
此方法存在一定的误差,但是比较高效。方法是利用多种不同的hash方法对数据集做hash运算,将对应的结果为key,值为1,然后判断一个新数在不在这个数据集中,则用相同的n中hash方法进行计算,如果全为1则认为在,任何一个不为1,则认为不在。
5、外排序
6、bitmap
7、多层划分
8、tire树
9、mapreduce