热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:大数据之布隆过滤器学习

篇首语:本文由编程笔记#小编为大家整理,主要介绍了大数据之布隆过滤器学习相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了大数据之布隆过滤器学习相关的知识,希望对你有一定的参考价值。






布隆过滤器——BloomFilter

1 BloomFilter的由来



​ 由霍华德.布隆的一个人在70年代提出的一个二进制向量数据结构。它可以帮助我们检测一个元素是否为这个集合中的一员。检测的结果可以100%保证元素一定不在这个集合中,但是不能100%一定在这个集合中。


在这里插入图片描述

tips:



从容器角度来说:


​ 如果布隆过滤器判断元素在集合中存在,不一定存在


​ 如果布隆过滤器判断不存在,一定不存在


从元素角度来说:


​ 如果元素实际存在,布隆过滤器一定判断存在


​ 如果元素实际不存在,布隆过滤器可能判断存在



1.1 爬虫

在这里插入图片描述


1.2 在hbase中的应用

作用:能减少get/scan的查询时间。不过它肯定增加集群的负担,在早期的hbase中是默认关闭的。在当前版本中默认实际是开启的。
hbase支持以下的布隆过滤器的类型:
- NONE : 不使用布隆过滤器
- ROW : 行键使用布隆过滤器
- ROWCOL : 行键+列簇使用布隆过滤器

1.3 缓存穿透

在这里插入图片描述

所谓缓冲穿透,就是例如在上图中,用户向Redis请求查询,但是没有查询到。接下来就会去数据库中查询,发现数据库里也没有,返回空。经过多次这样的操作,如果每次查询不到,都要在去数据库中再访问一遍,无疑会给数据库造成很大的压力。这种情况就是属于穿透了。
这时候就需要在Redis中设置一个特殊的标志,当用户访问Redis为空或者访问到这个标志后,就默认数据库中也没有这个数据,也就减少了数据库的压力。
但是有一点要注意,这个访问到特殊标志,就默认数据库没有数据一定要设置存活时间,当数据库中增加信息的时候,一定要让用户可以访问到。
随着数据的增多,特殊标识符的使用显得有点不足,这时候还是布隆过滤器承担重任。

1.4 布隆过滤器的其他应用场景


  • 反垃圾邮件,从数十亿垃圾邮件列表中 判断某邮箱是否是垃圾邮箱
  • Google Chrome使用布隆过滤器识别恶意URL
  • Medium使用布隆过滤器避免推荐给用户已经读过的文章
  • Google BigTable,Apache HBase,Apache Cassandra使用布隆过滤器减少对不存在的行和列的查找。

1.5 拓展



问:如何在海量元素中(例如 10 亿无序、不定长、不重复)快速判断一个元素是否存在?



  • 答1:好,我们最简单的想法就是把这么多数据放到数据结构里去,比如List、Map、Tree,一搜不就出来了吗,比如map.get(),我们假设一个元素1个字节的字段,10亿的数据大概需要 900G 的内存空间,这个对于普通的服务器来说是承受不了的。
  • 答2:用一种好的方法,巧妙的方法来解决,这里引入一种节省空间的数据结构,位图,他是一个有序的数组,只有两个值,0 和 1。0代表不存在,1代表存在。

在这里插入图片描述



我们还需要一个映射关系,你总得知道某个元素在哪个位置上吧,然后在去看这个位置上是0还是1,



  • 用到哈希函数,用哈希函数有两个好处,第一是哈希函数无论输入值的长度是多少,得到的输出值长度是固定的,第二是他的分布是均匀的,如果全挤的一块去那还怎么区分,比如MD5、SHA-1这些就是常见的哈希算法。

在这里插入图片描述

如上图中的1998和1996经过哈希函数得到的哈希值一样,就成为哈希冲突或者哈希碰撞。我们可以通过两种方法降低哈希碰撞产生的可能性。第一是扩大位图,但是内存消耗也在增加。第二是经过多个河西函数处理,但是越来越耗费时间。所以,还是需要用到布隆过滤器来处理。

在这里插入图片描述






推荐阅读
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 本文介绍了一种解决二元可满足性(2-SAT)问题的方法。通过具体实例,详细解释了如何构建模型、应用算法,并提供了编程实现的细节和优化建议。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 本文详细介绍了如何在Android 4.4及以上版本中配置WebView以实现内容的自动高度调整和屏幕适配,确保中文显示正常,并提供代码示例。 ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
author-avatar
郭楠v
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有