一、大顶堆、小顶堆框架
特别适合topN问题,如求海量日志中最大的100个数。既然是海量数据,那么内存中一会儿没法加载全部的数据集,此时能够先读取海量数据中的100个数,创建数据集为100的小顶堆(小顶堆的对顶比全部元素都小),而后依次往堆结构中读取数字,调整堆,使其保持小顶堆,最后获得top100的最大数。大数据
二、hash映射进行分治,而后归并url
hash映射按照数据特征把海量数据变的不海量,而后分别处理各段数据,再归并处理。例如:给定两个文件,各存放50亿个url,让你找出两个文件中共同的url,则能够根据url的特征,将两个文件分别映射到上千个小文件中,只要保证两个文件用的相同的hash映射方法,那么相同的url映射后必定在相同的小文件中,因此逐一比较各个小文件中的url,而后归并便可。日志
三、hash统计blog
以特征为key值利用hash表进行统计,好比,求一本书中26个字母出现的个数,能够以26个字母分别为key值,进行hash统计便可。排序
四、bloom filter内存
能够用于判重,此方法存在必定的偏差,可是比较高效。方法是利用多种不一样的hash方法对数据集作hash运算,将对应的结果为key,值为1,而后判断一个新数在不在这个数据集中,则用相同的n中hash方法进行计算,若是全为1则认为在,任何一个不为1,则认为不在。字符串
五、外排序hash
外只的是外存,由于内存一会儿放不下海量的数据,因此只好把大数据拆成小数据,在内存中进行排序,在外存中进行存储。基本思想是先对大数据拆分红n个小数据,而后对小数据排序,而后放入文件中,再用归并的方法,将已排序的小数据集进行归并。it
六、bitmap
位图用一个bit位来标记某个元素所对应的value,而key便是该元素自己,位图能够节约大量的空间。例如判断一个32位的整数是否在海量的32位整数数据集中出现过,则可以使用位图。
七、多层划分
和hash映射相似也是分而治之,只不过是若是数据集刚好有一些能够分层的特色,则能够直接分层化大为小。如,海量32位整数的数据集中找中位数,首先咱们将int划分为2^16个区域,而后读取数据统计落到各个区域里的数的个数,以后咱们根据统计结果就能够判断中位数落到那个区域,同时知道这个区域中的第几大数恰好是中位数。最后再次扫描咱们只统计落在这个区域中的那些数就能够了。
八、tire树
比较适合字符串类的查找,如把1000万个单词中的大量的重复单词去掉,可使用tire树进行查重。
九、mapreduce
有现成的大数据计算框架。