本文可以认为是http://blog.csdn.net/v_JULY_v/article/details/6279498的读后感,我是按照我理解的语言重新表述了一下而已。

海量数据处理的常用方法包括一下几种:

1.分而治之/hash映射 + hash统计 + 堆/快速/归并排序;
2.双层桶划分
3.Bloom filter/Bitmap;
4.Trie树/数据库/倒排索引;
5.外排序;
6.分布式处理之Hadoop/Mapreduce。

1. 分而治之/hash映射 + hash统计 + 堆/快速/归并排序;
分治是算法的核心思想,不过需要证明分治是适用的才行。 如何分呢,就是用Hash函数来做,用hash函数把大数据集分成几个小数据集,然后对小数据集进行统计,将多个子数据集的统计结果进行归并排序。例如:

海量日志数据,提取出某日访问百度次数最多的那个IP

可以IP地址按照IP%100,将IP地址分为100个子集,对各个子集分别统计频度,然后取出各个子集出现最多的IP,进而得到整体出现最多的IP

假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门),请你统计最热门的10个查询串,要求使用的内存不能超过1G。

这个也可以使用Trie树,

有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。

有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

2.双层桶划分
适用范围:第k大,中位数,不重复或重复的数字

2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(比如用单个文件代表一个区域),然后将数据分离到不同的区域,然后不同的区域在利用bitmap就可以直接解决了。也就是说只要有足够的磁盘空间,就可以很方便的解决。

5亿个int找它们的中位数。

这个例子比上面那个更明显。首先我们将int划分为2^16个区域,然后读取数据统计落到各个区域里的数的个数,之后我们根据统计结果就可以判断中位数落到那个区域,同时知道这个区域中的第几大数刚好是中位数。然后第二次扫描我们只统计落在这个区域中的那些数就可以了。

实际上,如果不是int是int64,我们可以经过3次这样的划分即可降低到可以接受的程度。即可以先将int64分成2^24个区域,然后确定区域的第几大数,在将该区域分成2^20个子区域,然后确定是子区域的第几大数,然后子区域里的数的个数只有2^20,就可以直接利用direct addr table进行统计了。

3.Bloom filter/Bitmap

适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集

给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢?

已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。
2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

  将bit-map扩展一下,用2bit表示一个数即可,0表示未出现,1表示出现一次,2表示出现2次及以上。或者我们不用2bit来进行表示,我们用两个bit-map即可模拟实现这个2bit-map。

4.Trie树/数据库/倒排索引

适用范围:数据量大,重复多,但是数据种类小可以放入内存

Trie树主要用来实现词频统计

5.外排序

6.分布式处理之Hadoop/Mapreduce

http://blog.csdn.net/v_july_v/article/details/7382693

转载于:https://www.cnblogs.com/whyandinside/archive/2012/07/07/2580755.html

海量数据处理方法的分析相关推荐

  1. 上亿海量数据处理方法

    上亿海量数据处理方法 1.海量日志数据,提取出某日访问百度次数最多的那个IP. 2.搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节. 3.有一个1G大 ...

  2. 海量数据处理方法总结 常见大数据题目汇总

    海量数据处理方法大总结 方式一:分而治之/hash映射(哈希映射) + hashmap统计 + 快速/归并/堆排序(万能方法) 这种方法是典型的"分而治之"的策略,是解决空间限制最 ...

  3. 海量数据处理(二) :常见海量数据处理方法

    对于常见的海量数据处理方法,通常为以下几种,下面的题解也会围绕这几种解法展开 位图 / 布隆过滤器 字典树 / 倒排索引 外部排序 分治 / 哈希切割 + 堆 / 排序 1. 给40亿个不重复的无符号 ...

  4. 海量数据处理方法总结

    目录 海量数据处理 算法与数据结构基础 海量数据处理方法归纳 分而治之 / hash 映射 + hash 统计 + 堆 / 快速 / 归并排序 多层桶结构 Bitmap / Bloom filter ...

  5. 算法13_10种海量数据处理方法

    1. Bloom Filter [Bloom Filter] Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.它是 ...

  6. winform 统计大量数据重复的元素个数_面试系列:十个海量数据处理方法大总结...

    本文将简单总结下一些处理海量数据问题的常见方法.当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题.下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定 ...

  7. 【大数据】海量数据处理方法

    1.海量日志数据,提取出某日访问百度次数最多的那个IP. 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中.注意到IP是32位的,最多有个2^32个IP.同样可以采用映射的方法 ...

  8. 十个海量数据处理方法大总结

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好 ...

  9. [转+整理]十道海量数据处理面试题与十个方法大总结

        海量数据处理:十道面试题与十个海量数据处理方法总结 作者:July.youwang.yanxionglu. 时间:二零一一年三月二十六日 本文之总结:教你如何迅速秒杀掉:99%的海量数据处理面 ...

最新文章

  1. R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战
  2. tpopela/vips_java
  3. 为什么python画不了图-解决python中使用plot画图,图不显示的问题
  4. python 实现杨辉三角(依旧遗留问题)
  5. JS 变量的数据类型转换
  6. FlashPaper安装及使用方法
  7. 移动硬盘(U盘)病毒对数据的破坏
  8. chrome插件开发引入图片静态资源
  9. 提高计算机CPU运行速度,提高cpu运行速度的方法
  10. 兄弟连猿代码less css 视频教程学习平台
  11. [从头读历史] 第263节 左传 [BC537至BC479]
  12. 【四大名企】5月27日18点,惟客数据、环信、融云、文因互联带着岗位来招人啦
  13. 纽约州顶尖计算机科学类学院,美国顶尖高中盘点——纽约州篇
  14. like语句太慢 sqlserver_MySQL Like模糊查询速度太慢如何解决
  15. python抢点_零基础SQL小白入门学习路线与书单
  16. java 一元线性回归_线性回归 - Java教程 - 找一找教程网
  17. 【EC算法】多模态优化(multimodel)与小生境(Niching)
  18. 数据库(十)-单表查询(1)条件查询
  19. pool win10提示bad_Win10系统电脑蓝屏提示bad pool header怎么办
  20. android 炫酷图案解锁,超级漂亮的手机锁屏图案,炫酷到飞起,总有一款适合你...

热门文章

  1. 用maven profile实现环境配置切换
  2. A5-1和DES两个加密算法的学习
  3. ios添加设备真机测试,以及Undefined symbols for architecture x86_64:''错误
  4. Python打包方法基本应用方式介绍
  5. MindFusion Pack for ASP.NET发布v2013.R2
  6. 在IE11下设置SharePoint Server 2013却遇到“需要 Internet Explorer 才能使用此功能。”的解决办法...
  7. ASP语言基础之常量的定义方法
  8. 用html编写ASCII表,HTML ASCII
  9. 一些部署django用到的linux命令
  10. python作业高级FTP(第八周)