背景
假如(假如。。。)我是Facebook,Twitter,或者是Weibo的工程师(额,,,);
每天有上亿用户在这个平台上发牢骚,晒经历,秀恩爱,炫富什么的,记得有每天有上亿条消息,
我们就想知道,下面这些问题:
- 最近一天(小时,分钟)大概有多少个不同的人在发牢骚?
- 最近一天(小时,分钟)秀恩爱次数排名前10(100,1000)的用户大概有哪些?
- 假设每个人每天的发推的数量是正态分布,找出发推数异常高的用户?
这些问题在数据量小的时候很容易解决,哈希,或者堆什么的记录一下就行了,最后再扫描一遍。
但是当数据量大到100G左右的时候,一台机器都没法放下这么大的哈希表;而且老大也不想加机器去做这么无聊的功能;更不想用Hadoop工具栈的分布式什么的把系统搞得很庞大,工程师人手也不足(话说两百个不到的工程师要支撑几亿用户也很那个啥)。
总的来说现有算法在大数据上有这些缺点
- 需要扫多次数据;这就需要把数据库库存到硬盘上,又把它读出来,对大数据凡是遇到硬盘都是比较蛋疼的事情;(因为硬盘不够多,读写速度又慢)
- 处理的时间没有受限;
- 内存使用通常为数据量相当,或者是平方;(额,,,问题是这里有100G的数据,当然垂直切割是比较好的方法,不过比较暴力,且又把网络给牵连进来了,对于大数据,网络是第二个比较蛋疼的事情)
- 且一部分算法并不支持分布式或者是垂直切割的合并结果(例如找到最近1小时发推的不同用户数)
不过我们的要求又是:
- 只扫一遍数据
- 希望能实时的处理数据