一、BitMap
解决的问题:
大数据量下的排序、查找、去重。
1、关键
通过 bit位 表示一个数值的状态(是否存在),那么1MB能大约表示 800万数值 (1,000,000B * 8 bit )
2、局限性:
1、内存限制:10位的数值(即99亿), 占用 1.25GB内存
2、一般应用在数值类型。字符串映射到 BitMap 存在Hash碰撞的问题(引入bloom filter)
3、不适合数据稀疏。比如要存入(10,10000,100000000)这三个数据(引入 Roaring BitMap)
3、应用场景
- 对 不重复的 密集整数 进行排序
- 查找数据是否存在海量集合中
- 找出没有重复的数据(两个bit位标识一个数值的状态)
二、Bloom Filter
解决的问题:
判断一个元素是否属于这个集合
1、关键
内存占用极少,不局限于数值类型。
2、局限性
存在错误率。
PS.
哈希函数个数 k、 位数组大小 m、输入key的数量 n
对于给定的m、n,当 k = ln(2)* m/n 时出错的概率是最小
3、应用场景
- MapReduce:BloomFilter 简介及在 Hadoop reduce side join 中的应用
- HBase 提高随机 读 的性能
- 查找key(不局限于数值) 是否存在海量集合中。
- 是否爬虫爬过
- 是否黑名单
三、基数计算
hyperloglog,落地场景:kylin & spark 对于 count distinct 操作