海量数据股吧~海量数据分析处理方法( 四 )
8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可 。
2)2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数 。
将bit-map扩展一下,用2bit表示一个数即可,0表示未出现,1表示出现一次,2表示出现2次及以上 。或者我们不用2bit来进行表示,我们用两个bit-map即可模拟实现这个2bit-map 。
4.堆
适用范围:海量数据前n大,并且n比较小,堆可以放入内存
基本原理及要点:最大堆求前n小,最小堆求前n大 。方法,比如求前n小,我们比较当前元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元 素 。这样最后得到的n个元素就是最小的n个 。适合大数据量,求前n小,n的大小比较小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高 。
扩展:双堆,一个最大堆与一个最小堆结合,可以用来维护中位数 。
问题实例:
1)100w个数中找最大的前100个数 。
用一个100个元素大小的最小堆即可 。
5.双层桶划分
适用范围:第k大,中位数,不重复或重复的数字
基本原理及要点:因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行 。可以通过多次缩小,双层只是一个例子 。
扩展:
问题实例:
1).2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数 。
有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(比如用单个文件代表一个区域),然后将数据分离到不同的区域,然后不同的区域在利用bitmap就可以直接解决了 。也就是说只要有足够的磁盘空间,就可以很方便的解决 。
2).5亿个int找它们的中位数 。
这个例子比上面那个更明显 。首先我们将int划分为2^16个区域,然后读取数据统计落到各个区域里的数的个数,之后我们根据统计结果就可以判断中位数落到那个区域,同时知道这个区域中的第几大数刚好是中位数 。然后第二次扫描我们只统计落在这个区域中的那些数就可以了 。
实际上,如果不是int是int64,我们可以经过3次这样的划分即可降低到可以接受的程度 。即可以先将int64分成2^24个区域,然后确定区域的第几 大数,在将该区域分成2^20个子区域,然后确定是子区域的第几大数,然后子区域里的数的个数只有2^20,就可以直接利用direct addr table进行统计了 。
6.数据库索引
适用范围:大数据量的增删改查
基本原理及要点:利用数据的设计实现方法,对海量数据的增删改查进行处理 。
扩展:
问题实例:
7.倒排索引(Inverted index)
适用范围:搜索引擎,关键字查询
基本原理及要点:为何叫倒排索引?一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射 。
以英文为例,下面是要被索引的文本:
T0 = “it is what it is”
T1 = “what is it”
T2 = “it is a banana”
我们就能得到下面的反向文件索引:
“a”: {2}
“banana”: {2}
“is”: {0, 1, 2}
“it”: {0, 1, 2}
“what”: {0, 1}
检索的条件”what”, “is” 和 “it” 将对应集合的交集 。
正 向索引开发出来用来存储每个文档的单词的列表 。正向索引的查询往往满足每个文档有序频繁的全文查询和每个单词在校验文档中的验证这样的查询 。在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列 。也就是说文档指向了它包含的那些单词,而反向索引则是单词指向了包含它的文档,很 容易看到这个反向的关系 。
扩展:
问题实例:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索 。
8.外排序
适用范围:大数据的排序,去重
基本原理及要点:外排序的归并方法,置换选择 败者树原理,最优归并树
扩展:
问题实例:
1).有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M 。返回频数最高的100个词 。
这个数据具有很明显的特点,词的大小为16个字节,但是内存只有1m做hash有些不够,所以可以用来排序 。内存可以当输入缓冲区使用 。
9.trie树
适用范围:数据量大,重复多,但是数据种类小可以放入内存
基本原理及要点:实现方式,节点孩子的表示方式
推荐阅读
- 5分钟了解数据模型 数据模型图连接线类型
- 数据分析6个维度 电商分析客户的维度
- 零售行业数据分析报告 网络零售数据分析流程
- 旗滨集团股票点评,可以买入吗?旗滨集团601636股票?旗滨集团股票发行价是多少 002625旗滨集团股吧
- 打你全面了解信息架构 信息架构的组织系统
- 超详解析这三个维度 商品数据分析从哪几个维度分析
- 5分钟详解数据分析使用方法 如何广告投放数据分析
- 3分钟了解蛋白组学数据 蛋白组学数据如何分析
- 最实用的方法及作用分析 如何广告投放数据分析
- 5个方面分析客户连续性 数据如何分析客户连续性