海量数据的难点:
1、时间长:怎么设计优化?
2、空间不够: 怎么大而化小、分而治之?怎么样存储能又省又快?
解决海量数据问题的主体思想:先划分为小,再快速处理,最后合并。
1、数据(文件)拆分:通过取模运算,将大数据(文件)拆分为若干个小数据(文件)。文件的拆分可能不是简单的几刀切,有可能是对所有数据根据某个依据的映射划分,这类似于桶的思想。
2、适合的数据结构: 常用来解决海量数据问题的数据结构有,Bloom filter/Hash表/bitmap/堆/倒排索引/trie字典树。
3、巧妙的算法:基于数据结构的算法。
4、数据归并:将各小数据的结果归并起来。
喜闻乐见的Hash:Hash它有3个功能。
1、划分功能,即将大的研究对象映射关联为小的映射对象,达到大而化小的效果,做法一般是,hash(关键字)%分组个数,起到了分桶的作用。
2、统计功能,即能用线性的时间和较小的空间进行出现次数统计。
3、快速查找:O(1)的查找速度,根据关键字以最快的速度找到我需要的数据或位置。
常见方法:
1、日志TOP问题: 分桶 -> hash统计 -> 堆排序 -> 结果归并
2、第K大问题:多次划分,逐步确定范围。
3、是否出现/重复出现问题:分桶 -> bitmap或bloom filter