https://cloud.tencent.com/developer/article/1480540

解题思路:布隆过滤器

基础介绍

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量(位图)和一系列随机映射函数(哈希函数)。
布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

实际工程的应用

实际上,布隆过滤器广泛应用于网页黑名单系统、垃圾邮件过滤系统、爬虫网址判重系统等,有人会想,我直接将网页URL存入数据库进行查找不就好了,或者建立一个哈希表进行查找不就OK了。

当数据量小的时候,这么思考是对的,但如果整个网页黑名单系统包含100亿个网页URL,在数据库查找是很费时的,并且如果每个URL空间为64B,那么需要内存为640GB,一般的服务器很难达到这个需求。

那么,在这种内存不够且检索速度慢的情况下,不妨考虑下布隆过滤器,但业务上要可以忍受判断失误率。

位图(bitmap)

布隆过滤器其中重要的实现就是位图的实现,也就是位数组,并且在这个数组中每一个位置只占有1个bit,而每个bit只有0和1两种状态。如上图bitarray所示!bitarray也叫bitmap,大小也就是布隆过滤器的大小。

假设一种有k个哈希函数,且每个哈希函数的输出范围都大于m,接着将输出值对k取余(%m),就会得到k个[0, m-1]的值,由于每个哈希函数之间相互独立,因此这k个数也相互独立,最后将这k个数对应到bitarray上并标记为1(涂黑)。

等判断时,将输入对象经过这k个哈希函数计算得到k个值,然后判断对应bitarray的k个位置是否都为1(是否标黑),如果有一个不为黑,那么这个输入对象则不在这个集合中,也就不是黑名单了!如果都是黑,那说明在集合中,但有可能会误,由于当输入对象过多,而集合也就是bitarray过小,则会出现大部分为黑的情况,那样就容易发生误判!因此使用布隆过滤器是需要容忍错误率的,即使很低很低!

布隆过滤器重要参数计算

通过上面的描述,我们可以知道,如果输入量过大,而bitarray空间的大小又很小,那么误判率就会上升。那么bitarray空间大小怎么确定呢?不要慌,已经有人通过数据推倒出公式了!!!哈哈,直接用~

假设输入对象个数为n,bitarray大小(也就是布隆过滤器大小)为m,所容忍的误判率p和哈希函数的个数k。计算公式如下:(小数向上取整)

注意:由于我们计算的m和k可能是小数,那么需要经过向上取整,此时需要重新计算误判率p!

假设一个网页黑名单有URL为100亿,每个样本为64B,失误率为0.01%,经过上述公式计算后,需要布隆过滤器大小为25GB,这远远小于使用哈希表的640GB的空间。

并且由于是通过hash进行查找的,所以基本都可以在O(1)的时间完成!

布隆过滤器的测试

测试用例来自GitHub的CPP版的布隆过滤器!
GitHub地址:https://github.com/ArashPartow/bloom

测试数据展示
我们关心的主要是Queries列和FPQ列,可以看出,输入对象为1万多个时也会出现错误的访问,当然概率极低的,那么如果我们一直增加Queries的次数,其误判率是怎么样的!

测试数据展示
我们可以看到作者一共测试到了1715万次输入,而平均的误判率为0.00023738,充分说明了布隆过滤器的有效性。如果想要了解底层的话,可以去看看源码学习学习!

思考题:存储了100亿个非法网页的url地址。每个URL地址的大小占用64B。要求实现一个网页过滤系统,内存使用不能超过30GB,此外,允许有一定的误判率,但是不能超过万分之一相关推荐

  1. 中国大数据资产运营商九次方大数据估值或将突破100亿

    大数据是信息化发展的新阶段,我国旺盛的大数据应用需求和巨大的市场空间,在为大数据产业的创新发展提供强大驱动力的同时,催生了一大批大数据企业在中国崛起.2010年就投身其中的中国大数据资产运营商,九次方 ...

  2. 搜索100亿网页 雅虎搜索放言技术已超百度

    雅虎搜索专利持有人吴炯昨日对媒体表示,雅虎中国的搜索在技术上已经超过百度. 在接受记者采访时,吴炯称,雅虎的分词技术在国际权威大赛中表现最好,雅虎有而百度没有的网页自动翻译更是解决了用户的语言障碍. ...

  3. 华为麒麟990芯片发布;谷歌宣布开源创新隐私保护技术;阿里20亿美元全资收购网易考拉;中国联通将设立100亿5G创新基金……...

    关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...

  4. 1小时识别100亿张图像,每秒 80 亿亿次!「智算巨头」亮相中国南京

    「智算中心新巨头」露面!近日,南京智能计算中心正式投入运营,其运营系统的 AI 计算能力达每秒 80 亿亿次 (800P OpS),夺魁长三角当前投运的最高算力的智能计算中心. 算力yyds! 不久前 ...

  5. 李佳琦一晚卖了100亿,有位“硬汉”在背后默默发力

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI "美眉,来喽,来喽,上链接!" 话音刚落. "没了,全没了,都被抢光喽!" 头部主播李佳琦,一夜10 ...

  6. 96秒100亿!如何抗住双11高并发流量?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 来源:uee.me/c9UsN 今年双 11 全民购物狂欢 ...

  7. MySQL 亿级数据需求的优化思路(二),100亿数据,1万字段属性的秒级检索

    最近在研究亿级数据的时候,无意中看到了一个关于写58同城的文章 https://blog.csdn.net/admin1973/article/details/55251499?from=timeli ...

  8. 第一百一十二期:96秒100亿!如何抗住双11高并发流量?

    今年双 11 全民购物狂欢节进入第十一个年头,1 分 36 秒,交易额冲到 100 亿 !比 2018 年快了近 30 秒,比 2017 年快了近 1 分半!这个速度再次刷新天猫双 11 成交总额破 ...

  9. 备战双 11!96秒,100亿,支付宝万级规模 K8s 集群管理系统如何设计?

    2019年双11来了.1分36秒100亿,5分25秒超过300亿,12分49秒超500亿--全球最大流量洪峰54.4万笔,阿里巴巴核心系统全部上云... 背后的技术支撑到底是怎么样的呢? 导读:Kub ...

最新文章

  1. postgresql支持唯一约束吗_PostgreSQL:2列联合的唯一约束
  2. Akka的好用例[关闭]
  3. 没有4G时代,有的只是后3G时代
  4. 迟到的2017年终总结与2018目标规划
  5. 记一次vue 普通异步请求微信二进制二维码 乱码 问题解决然后渲染
  6. jsp思维导图_2019年经济法基础思维导图
  7. 使用maxwell实时同步mysql数据到kafka
  8. 我给女朋友讲编程html系列(1) -- Html快速入门
  9. 【kafka】kafkaProducer 拉取元数据的流程
  10. centos修改磁盘uuid_如何修改linux磁盘的uuid
  11. go 查找模块位置_如何使用Go语言插件功能?
  12. Trie(字典)树详解
  13. 【Firewalld(Iptables)】
  14. 智能时代 什么样的家庭安防系统更靠谱?
  15. PDF Expert for Mac 2.5.5 中文版 — PDF编辑工具
  16. 动手学深度学习之锚框
  17. java calendar 设置时区_详解Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat
  18. nodejs前端+后端
  19. Activiti7-任务分配
  20. http://wenku.baidu.com/view/d6433106a6c30c2259019e63.html

热门文章

  1. Matlab入门基础_三
  2. 示波器探头如何连接设备?
  3. java ocx调用_Java调用ocx控件以及dll
  4. 阿里云 数加 · DataWorks 数据同步
  5. C++求1000以内水仙花数
  6. java转义括号_java转义括号
  7. 如何使用python进行自动网上考试
  8. 手把手教您JbuliderX+Tomcat5.0的配置
  9. 干掉Vivado幺蛾子(1)-- Xilinx Tcl Store
  10. 收集得最全的sql 语句