当前位置: 首页 > news >正文

建筑网站建设需要注意哪些福建建设人才网站

建筑网站建设需要注意哪些,福建建设人才网站,网站设计流程是什么,c2c平台网站建设文章目录 背景什么是布隆过滤器Redis 中的布隆过滤器布隆过滤器使用注意事项实现原理空间占用估计 背景 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻…

文章目录

  • 背景
  • 什么是布隆过滤器
  • Redis 中的布隆过滤器
  • 布隆过滤器使用
  • 注意事项
  • 实现原理
  • 空间占用估计

背景

我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的?

你会想到服务器记录了用户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那些已经存在的记录。问题是当用户量很大,每个用户看过的新闻又很多的情况下,这种方式,推荐系统的去重工作在性能上跟的上么?

实际上,如果历史记录存储在关系数据库里,去重就需要频繁地对数据库进行 exists 查询,当系统并发量很高时,数据库是很难扛住压力的。你可能又想到了缓存,但是如此多的历史记录全部缓存起来,那得浪费多大存储空间啊?而且这个存储空间是随着时间线性增长,你撑得住一个月,你能撑得住几年么?但是不缓存的话,性能又跟不上,这该怎么办?这时,布隆过滤器 (Bloom Filter) 闪亮登场了,它就是专门用来解决这种去重问题的。它在起到去重的同时,在空间上还能节省 90% 以上,只是稍微有那么点不精确,也就是有一定的误判概率。

什么是布隆过滤器

布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率

当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存
。这来源于它的底层实现,在接下来讲解原理时你就明白了。

Redis 中的布隆过滤器

Redis 官方提供的布隆过滤器到了 Redis 4.0 提供了插件功能之后才正式登场。布隆过滤器作为一个插件加载到 Redis Server 中,给 Redis 提供了强大的布隆去重功能。

布隆过滤器使用

布隆过滤器有二个基本指令, bf.add 添加元素, bf.exists 查询元素是否存在,它的用法和 set 集合的 sadd 和 sismember 差不多。注意 bf.add 只能一次添加一个元素,如果想要一次添加多个,就需要用到 bf.madd 指令。同样如果需要一次查询多个元素是否存在,就需要用到 bf.mexists 指令。

注意事项

创建布隆过滤器时需要3个参数,分别是 key, error_rate 和 initial_size。错误率越低,需要的空间越大。 initial_size 参数表示预计放入的元素数量,当实际数量超出这个数值时,误判率会上升。

所以需要提前设置一个较大的数值避免超出导致误判率升高。如果不使用 bf.reserve,默认的 error_rate 是 0.01,默认的 initial_size 是 100。

布隆过滤器的 initial_size 估计的过大,会浪费存储空间,估计的过小,就会影响准确
率,用户在使用之前一定要尽可能地精确估计好元素数量,还需要加上一定的冗余空间以避免实际元素可能会意外高出估计值很多。

布隆过滤器的 error_rate 越小,需要的存储空间就越大,对于不需要过于精确的场合,error_rate 设置稍大一点也无伤大雅。比如在新闻去重上而言,误判率高一点只会让小部分文章不能让合适的人看到,文章的整体阅读量不会因为这点误判率就带来巨大的改变。

实现原理

如下是一张布隆过滤器的结构图:
在这里插入图片描述

每个布隆过滤器对应到 Redis 的数据结构里面就是一个大型的位数组和几个不一样的无偏 hash 函数。所谓无偏就是能够把元素的 hash 值算得比较均匀。

向布隆过滤器中添加 key 时,会使用多个 hash 函数对 key 进行 hash 运算得一个整数索引值然后对位数组长度进行取模运算得到一个位置,每个 hash 函数都会算得一个不同的位置。再把位数组的这几个位置都置为 1 就完成了 add 操作。

向布隆过滤器询问 key 是否存在时,跟 add 一样,也会把 hash 的几个位置都算出
来,看看位数组中这几个位置是否都位 1,只要有一个位为 0,那么说明布隆过滤器中这个key 不存在。如果都是 1,这并不能说明这个 key 就一定存在,只是极有可能存在,因为这些位被置为 1 可能是因为其它的 key 存在所致。如果这个位数组比较小,这个概率就会很大,如果这个位数组比较大,这个概率就会降低。

使用时不要让实际元素远大于初始化大小,当实际元素开始超出初始化大小时,应该对布隆过滤器进行重建,重新分配一个 size 更大的过滤器,再将所有的历史元素批量 add 进去 (这就要求我们在其它的存储器中记录所有的历史元素)。因为 error_rate 不会因为数量超出就急剧增加,这就给我们重建过滤器提供了较为宽松的时间。

空间占用估计

有很多现成的网站已经支持计算空间占用的功能了,我们只要把参数输进去,就可以直接看到结果。

http://www.yayakq.cn/news/919207/

相关文章:

  • 网站建设不用备案的山东济南网站建设
  • 建设淘宝网站的市场分析wordpress对文章归档打开慢
  • 许昌网站seo网站开发 工作量评估
  • 建网站买空间专业微信网站
  • 网站建设小西门北京做机床的公司网站
  • 专业电商网站建设中国承德
  • 四川省建设科技协会网站百度的广告推广需要多少费用
  • 农业网站建设做网站和谷歌推广一共多少钱
  • 韩国化妆品网站金色flash片头内丘网站建设案例
  • 口碑好的合肥网站建设网站与网址的区别
  • 自适应网站案例源码合肥建设网站制作哪个好
  • 建设电影网站如何赚钱长沙网络营销首选智投未来
  • 高清素材网站无水印企业网站源码哪个最好
  • 做网站广告有哪些职位怎么设计个人网站
  • 做3d效果的网站甘肃网站建设公司
  • phpwind转WordPress百度官方优化指南
  • 网站空间维护郑州seo外包顾问热狗
  • 网站域名申请费用四川省城乡建设网查询
  • 网站工程师招聘wordpress连载小说插件
  • 做外贸铝材哪个网站比较好东莞金融网站建设
  • 微信网站模板源码哪些大学网站做的比较好
  • 网站备案提示个人网站怎么做打赏
  • 网站封面如何做的吸引人英文网站建设成都
  • 怎么修改网站上传附件大小网络舆情是什么意思
  • 网页制作模板主题天津seo网络
  • 平板电脑做网站吗五金配件店 东莞网站建设
  • 为国外客户做网站建设什么软件可以定制app图标
  • 深圳企业专业网站设计国内做外贸网站的有哪些
  • 广州市公司网站建设公司免费成品网站下载
  • 网站开发确认函做减肥餐的网站