BitMap
https://www.cnblogs.com/dragonsuc/archive/2019/06/09/10993938.html
布隆滤波器
它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。
哈希碰撞会导致布隆滤波器发生误判。
布隆滤波器可以用于大数据去重。
应用
- HBase
提高随机读的性能。利用磁盘空间减小系统的IO负荷。
每一个HBase中的StoreFile持有一个Bloom filter。布隆过滤器的主要作用,是帮助HBase跳过那些显然不包括所查找数据的底层文件。根据布隆滤波器的同特性,如果某个文件不包含指定行,用户可以立刻知道。当然,可能会有bloom过滤器认为文件包含该行但是实际上不包含的情况。
详细请查阅HBase的相关文档。
- 网页爬虫对URL的去重,避免爬取相同的URL地址;
- 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱(同理,垃圾短信);
- 缓存击穿,将已存在的缓存放到布隆中,当黑客访问不存在的缓存时迅速返回避免缓存及DB挂掉。
替代方案
BitMap去重
如果不想接收错误率,愿意牺牲空间,还有一种BitMap去重的办法。原理很简单,就是对每一个数值映射唯一的地址。然后存储1bit。