-
Hash法:哈希表。用于快速存取、统计某些数据,将大量数据进行分类。例如提取某日访问网站次数最多的IP地址等。
-
Bit-map:使用位数组来表示某些元素是否存在。用于海量数据的快速查找、判重、删除等。如从8位电话号码中查找重复号码或统计不同号码的个数(可用多个bit表示一个数)。
-
Bloom Filter:位数组+k个hash函数。定义m位初始化都为0的数组,每个函数都可以将元素映射到某一位。判断某个元素是否属于集合时,查看k个位是否全部为1。缺点:若都为1存在错误率、无法删除元素。如检查英文单词是否拼写正确、邮箱过滤垃圾邮件、找出两个各存放50亿条URL的文件中共同的URL。
-
数据库优化法:创建索引、配置缓存、切表分表、数据采样。 倒排索引法:正向索引用来存储每个文档的单词的列表,反向索引则是单词指向了包含它的文档。如常见的学术论文的关键词搜索。
-
外排序法:内存不能一次处理待排序的对象,必须把它以文件的形式存放于外存,排序时(归并排序)再把他们一部分一部分地调入内存进行处理。用于大文件的排序以及去重。
-
Trie树:前缀树。根节点不包含字符,除根节点外的每一个子节点都包含一个字符。从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点包含构成单词数量count。用于词频统计、前缀匹配、字符串排序。
-
堆:二叉堆。适用于海量数据求前N大(小顶堆)、前N小(大顶堆)或中位数(双堆)问题。如100w个数中找最大的前100个数。
-
双层桶:分而治之。因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。如5亿个整数中找出不重复的整数的个数(内存装不下)。将数据分离到不同的区域文件,不同的区域在利用bitmap来解决。
-
MapReduce法:将数据划分并交给不同的机器去处理,结果归约。
【面试题】海量数据处理常见方法总结
最新推荐文章于 2023-01-19 07:00:00 发布