大数据计数原理1+0=1这你都不会算(三)

简介:

2017年架构师最重要的48个小时 | 8折倒计时


这是本坑的第三篇,之前已经说了关于 HashSet 和 BitMap 了,这次说说 Bloom Filter 布隆过滤器,要是还不知道前面讲了啥的,可以点一下下面的连接看看。

大数据计数原理1+0=1这你都不会算(一)

大数据计数原理1+0=1这你都不会算(二)

我们都知道BitMap已经非常节省空间了,一个值只需要一个 bit 就可以进行统计了,但是,对于上百亿的数据来说,碰撞率即使非常低,但也不是一个可以忽视的问题了。

当时提出这个问题,一个是因为垃圾电子邮箱,每天少说都有几十亿的垃圾邮箱在发垃圾邮件,把这些邮件直接全部都存储起来,不是一个经济的做法。使用 BitMap 来进行存储吧,碰撞的次数太多,很多正常的邮件都被标记为黑名单邮件,很是难受。

另外一个是因为 Google 的爬虫,在进行链接抓取的时候,为了效率,都要知道哪些链接抓过哪些没抓过,一开始也是用的 BitMap ,但是碰撞的链接太多,导致很多链接都无法抓到,导致很多网页都没法被搜录,也很是难受。

怎么办呢?空间时间已经使用到极致了,hash算法也选择了能尽量平均分配到整个数组的 bit 里面了。大神Burtom Bloom 发明了一个布隆算法。

这个算法的存储结构跟 BitMap 是相同的,区别在于它使用了多个 Hash 算法,一个字符串经过N个 Hash 算法会生成多个 Hash 值,如果N个值的 bit位 都为1 ,才判定该字符串已经存在。

比如字符串 “小蕉写得这么给力你不点个赞吗”,经过 Hash 算法1、Hash 算法2、Hash 算法3,生成了数字,1、11、21。

这时候又来了一个字符串 “小蕉写得这么给力你不点个赞”,经过 Hash 算法1、Hash 算法2、Hash 算法3、生成了数字,1,11,19。

发现,咦,没有全部出现,所以该字符串没有出现过。

就这样,一个 Bloom Filter 就构造完了,每次只需要生成N个值就可以判定该字符串有没有存在过了,经过严格的数学推导,只需要 8 个 Hash 函数,就可以把Bloom Filter 的错误率降低到一个非常低的值,非常可靠。

我们这样想,即使真的真的真的那么巧,k-1个Hash函数的值都一样,只要第k个不一样,那这个算法依然会把它当成新的元素。这样就解决了 BitMap 误判率高的问题了,时间复杂度也只是根据所选Hash函数的个数线性增长。



本文作者:大蕉

来源:51CTO


相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
4月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
59 0
|
4月前
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
120 0
|
6月前
|
存储 分布式计算 Hadoop
【大数据处理框架】Hadoop大数据处理框架,包括其底层原理、架构、编程模型、生态圈
【大数据处理框架】Hadoop大数据处理框架,包括其底层原理、架构、编程模型、生态圈
136 0
|
2月前
|
SQL 并行计算 大数据
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
关于Flink服务的搭建与部署,由于其涉及诸多实战操作而理论部分相对较少,小编打算采用一个独立的版本和环境来进行详尽的实战讲解。考虑到文字描述可能无法充分展现操作的细节和流程,我们决定以视频的形式进行分析和介绍。因此,在本文中,我们将暂时不涉及具体的搭建和部署步骤。
496 3
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
|
4月前
|
存储 分布式计算 大数据
【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)
【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)
68 0
|
4月前
|
分布式计算 资源调度 大数据
【大数据技术Hadoop+Spark】Spark架构、原理、优势、生态系统等讲解(图文解释)
【大数据技术Hadoop+Spark】Spark架构、原理、优势、生态系统等讲解(图文解释)
193 0
|
18天前
|
分布式计算 大数据 Hadoop
【大数据原理与技术】期末习题总结大全,建议收藏
【大数据原理与技术】期末习题总结大全,建议收藏
|
5月前
|
机器学习/深度学习 分布式计算 大数据
大数据 - MapReduce:从原理到实战的全面指南
大数据 - MapReduce:从原理到实战的全面指南
341 0
|
6月前
|
SQL 分布式计算 算法
【大数据处理框架】Spark大数据处理框架,包括其底层原理、架构、编程模型、生态圈
【大数据处理框架】Spark大数据处理框架,包括其底层原理、架构、编程模型、生态圈
234 0
|
6月前
|
存储 大数据 关系型数据库
大数据时代必备技能——分库分表的原理与应用
大数据时代必备技能——分库分表的原理与应用