布隆过滤器和Hyperloglog基数统计的介绍

本文简单介绍一下布隆过滤器和Hyperloglog基数统计的应用案例,希望能给读者带来一点思考和启发

布隆过滤器

介绍:
布隆过滤器可以判断一个元素是否在一个集合中。特点:该布隆过滤器中记录元素的集合占用的空间少,集合保存的不是元素本身,而是能代表这个元素的映射。当然,判断这个元素是否在集合中存在会有误判几率,但是这个误差几率可以控制在指定范围。

应用案例:
-防止缓存穿透
-过滤垃圾邮件
-等等。。。

使用工具的思路:
对于Java,可以使用google的Guava工具类BloomFilter
1)把所有目标元素添加进BloomFilter顾虑器集合
2)指定判断的误差概率
3)过滤器判断某元素是否存在

使用该过滤器防止缓存穿透的做法是用过滤器判断请求的元素是否在缓存中存在,如果不存在就程序返回空值,如果存在就继续从缓存中读取元素。如果误判-缓存中并没有该元素,才从数据库读取元素。

原理:请参看推荐阅读: 数学之美 二十一 布隆过滤器(Bloom Filter)


Hyperloglog

介绍:
HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值。特点是,即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的、并且是很小的。

应用案例:
-统计网站访问人数
-统计独立IP数
-等等。。。

使用工具的思路:
对于Redis,可以使用PFADD 和 PFCOUNT 命令
1)将任意数量的元素添加到指定的 HyperLogLog 里面
2)返回给定 HyperLogLog 的基数估算值

原理:推荐阅读 大数据计算:如何仅用1.5KB内存为十亿对象计数


启发

1)布隆过滤器和Hyperloglog都是大数据量场景下利用哈希函数和概率论的数学知识牺牲准确性换取空间的解决问题思路。
2)哈希函数太重要了,应用领域非常广。
3)量变到质变。当数据量不大时候,用常规的方法可以得到问题的精准答案,但当数据量变得非常大的时候,常规方法无法解答或者无法获得精准答案,这时候可以用概率论的方法尝试解决问题,这恰好体现了概率论在大数据方面的应用价值。而概率论又恰好需要有大数据量的基础去体现理论的正确性。


推荐阅读

如果想知道更多数学知识在计算机领域的重要实际应用,可以扩展阅读下面文章。链接地址:点击

数学之美 一 统计语言模型
数学之美 二 谈谈中文分词
数学之美 三 隐含马尔可夫模型在语言处理中的应用
数学之美 四 怎样度量信息?
数学之美 五 简单之美:布尔代数和搜索引擎的索引
数学之美 六 图论和网络爬虫 (Web Crawlers)
数学之美 七 信息论在信息处理中的应用
数学之美 八 贾里尼克的故事和现代语言处理
数学之美 九 如何确定网页和查询的相关性
数学之美 十 有限状态机和地址识别
数学之美 十一 Google 阿卡 47 的制造者阿米特.辛格博士
数学之美 十二 余弦定理和新闻的分类
数学之美 十三 信息指纹及其应用
数学之美 十四 谈谈数学模型的重要性
数学之美 十五 繁与简 自然语言处理的几位精英
数学之美 十六 不要把所有的鸡蛋放在一个篮子里 最大熵模型
数学之美 十七 闪光的不一定是金子 谈谈搜索引擎作弊问题(Search Engine Anti-SPAM)
数学之美 十八 矩阵运算和文本处理中的分类问题
数学之美 十九 马尔可夫链的扩展 贝叶斯网络 (Bayesian Networks)
数学之美 二十 自然语言处理的教父 马库斯
数学之美 二十一 布隆过滤器(Bloom Filter)
数学之美 二十二 由电视剧《暗算》所想到的 — 谈谈密码学的数学原理
数学之美 二十三 输入一个汉字需要敲多少个键 — 谈谈香农第一定律

你可能感兴趣的:(Java开发,业务系统设计,实践经验分享)