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

长沙网站建设工作室快排seo

长沙网站建设工作室,快排seo,功能网站建设,网站设计青岛场景描述 小程序用户的openid作为最主要的业务查询字段,在做了缓存设计之后仍有非常高频的查询,通过埋点简单统计约在每日1000w次。 其中:由于有新增用户原因,导致请求的openid根本不存在MySQL数据库中,这部分统计约占…

场景描述

小程序用户的openid作为最主要的业务查询字段,在做了缓存设计之后仍有非常高频的查询,通过埋点简单统计约在每日1000w次。
其中:由于有新增用户原因,导致请求的openid根本不存在MySQL数据库中,这部分统计约占30%左右,也就是约300w次查询是浪费的。

假设openid的总量可能达到10亿级别

解决思路:基于redis使用布隆过滤器 

方案介绍

1. 布隆过滤器

布隆过滤器(Bloom Filter)
是一种数据结构,其主要功能是判断某个元素是否出现在集合中。
它通过使用多个哈希函数将元素映射到一个位数组中,并将对应位标记为1,来实现对元素的判重。
如果一个元素在位数组中对应的位置上有一位为0,那么该元素一定不存在于集合中,
如果所有对应位都为1,那么该元素可能存在于集合中。

具体来说:
当要加入一个元素时,使用多个不同的哈希函数对该元素进行哈希,得到多个哈希值,然后将这些哈希值对应的位数组上的位置置为1。
当查找一个元素时,同样使用多个哈希函数进行哈希,然后查看对应位置上的位,
如果存在任意一位为0,那么该元素不存在于集合中;
如果所有位都为1,那么该元素可能存在于集合中,需要进一步确认。

但是,布隆过滤器存在一定的误判率。

对于一个元素,如果多个哈希函数将其映射到的位都已被标记为1,则它可能被误判为存在于集合中,即有一定的假阳性率 。

误判率取决于哈希函数的数量和位向量的长度。

2. 10亿数据如何做布隆过滤?

· redis的bitmap

Bitmap:是一种Bit数组数据结构,它的主要作用是储存0和1两个状态。

在Redis中,Bitmap通过字符串来实现,一个字符串可以存储超过2^32个元素,所以一个bloom能存储的最大上限就是2^32个,约42.9亿。占用的内存是512M

虽然单个bitmap最大可达到42亿,但是算上误差率其实是不够的,而且在redis中我们也应该尽量避免这种大key的使用

· 分片

  1. 范围划分:将 32-bit 的范围 ([0, n)) 划分为 2^10 个桶,每一个桶有一个 Container 来存放一个数值的低26位;
  2. 存储:在存储和查询数值的时候,将一个数值 k 划分为高 10 位(k % 2^10)和低 26 位(k mod 2^26),取高 10 位找到对应的桶,然后在低 26 位存放在相应的 Container 中;
  3. 查询判断:当查询一个数值 k 是否存在时,我们只需要判断 k mod 2^26 是否存在于对应的 Container 中即可。

· 实现取高位和低位代码 

取高位作桶,就是通过位运算向右移10位
将一个数的二进制位向左或向右移动特定的位数。向左移动相当于在该数的二进制表示中加上多个0,向右移动相当于去掉多余的二进制位

$container = $hash >> 10; 

取低位作数据字段,就是通过&位运算取26位
它对两个数的每一个二进制位进行比较,只有当两个数的对应二进制位都为1时,结果才会将该位置设置为1,否则设置为0
0x3FFFFFF是26位全1的二进制数的16进制表示方式
可以简单理解为就是截取了一个数的低26位

$index     = $hash & 0x3FFFFFF; 

· go-zero的bloom介绍(core/bloom/bloom.go)

// New create a Filter, store is the backed redis, key is the key for the bloom filter,
// bits is how many bits will be used, maps is how many hashes for each addition.
// best practices:
// elements - means how many actual elements
// when maps = 14, formula: 0.7*(bits/maps), bits = 20*elements, the error rate is 0.000067 < 1e-4
// for detailed error rate table, see http://pages.cs.wisc.edu/~cao/papers/summary-cache/node8.html
func New(store *redis.Redis, key string, bits uint) *Filter {return &Filter{bits:   bits,bitSet: newRedisBitSet(store, key, bits),}
}

go-zero内置的bloom默认采用的hash次数是14,元素预估需要使用的bitmap位数是20倍多元素数量,错误率在0.000067左右

· Hash函数规划

已知元素总量为10亿,分片数为2^10=1024,那么每个分片元素数量为976562,需要的bitmap长度是 20*976562 = 19531240,也就是小于2^25=33554432(redis官网上介绍,bitmap长度达到2^26-1大约需要8M内存),那么总内存预估使用8G左右,分散在集群的各个节点上

所以保留一定的弹性范围,在使用go-zero自带的bloom时,key根据2^10进行分片,单个bloom的bits=30000000


文章转载自:
http://wanjiamasonwork.mdwb.cn
http://wanjiasoftland.mdwb.cn
http://wanjiahebraist.mdwb.cn
http://wanjiaparol.mdwb.cn
http://wanjiaslatch.mdwb.cn
http://wanjiaheterodoxy.mdwb.cn
http://wanjialacrimose.mdwb.cn
http://wanjiagerard.mdwb.cn
http://wanjiaduffer.mdwb.cn
http://wanjiabare.mdwb.cn
http://wanjiaairtight.mdwb.cn
http://wanjiaoverinspirational.mdwb.cn
http://wanjiatotalizator.mdwb.cn
http://wanjiamarten.mdwb.cn
http://wanjiaasymptomatically.mdwb.cn
http://wanjiainsignificance.mdwb.cn
http://wanjiaganges.mdwb.cn
http://wanjiachthonophagia.mdwb.cn
http://wanjiamealie.mdwb.cn
http://wanjiacephalochordate.mdwb.cn
http://wanjiakingsoft.mdwb.cn
http://wanjiavext.mdwb.cn
http://wanjiarechristen.mdwb.cn
http://wanjiaparchment.mdwb.cn
http://wanjiathermosensitive.mdwb.cn
http://wanjialammergeier.mdwb.cn
http://wanjiaexplanans.mdwb.cn
http://wanjiaextradition.mdwb.cn
http://wanjiamcs.mdwb.cn
http://wanjiacoder.mdwb.cn
http://wanjiajokiness.mdwb.cn
http://wanjiacerebellar.mdwb.cn
http://wanjiapitchometer.mdwb.cn
http://wanjiarasta.mdwb.cn
http://wanjiaringdove.mdwb.cn
http://wanjiapsychrometer.mdwb.cn
http://wanjiaimplicit.mdwb.cn
http://wanjiapermeable.mdwb.cn
http://wanjiaexorcist.mdwb.cn
http://wanjiarectificative.mdwb.cn
http://wanjiareperusal.mdwb.cn
http://wanjiascraggly.mdwb.cn
http://wanjiaeyeleteer.mdwb.cn
http://wanjiacephalochordate.mdwb.cn
http://wanjiabacchanalian.mdwb.cn
http://wanjiadepasturage.mdwb.cn
http://wanjiamalison.mdwb.cn
http://wanjiastygian.mdwb.cn
http://wanjiaplagioclimax.mdwb.cn
http://wanjiatheory.mdwb.cn
http://wanjiareunify.mdwb.cn
http://wanjiashf.mdwb.cn
http://wanjialakefront.mdwb.cn
http://wanjiaverdure.mdwb.cn
http://wanjialaggar.mdwb.cn
http://wanjiavictory.mdwb.cn
http://wanjiaoutrage.mdwb.cn
http://wanjiadutifully.mdwb.cn
http://wanjiaconsanguineous.mdwb.cn
http://wanjiaprecession.mdwb.cn
http://wanjiasickroom.mdwb.cn
http://wanjiaangiogram.mdwb.cn
http://wanjiagamelin.mdwb.cn
http://wanjiaambitendency.mdwb.cn
http://wanjiatraction.mdwb.cn
http://wanjiamalacostracan.mdwb.cn
http://wanjiaconciliator.mdwb.cn
http://wanjiapleuroperitoneal.mdwb.cn
http://wanjiacomplementizer.mdwb.cn
http://wanjiageodynamics.mdwb.cn
http://wanjiablackbird.mdwb.cn
http://wanjiapulvillus.mdwb.cn
http://wanjiaunappealable.mdwb.cn
http://wanjiamidland.mdwb.cn
http://wanjiasurfmanship.mdwb.cn
http://wanjiaflaunt.mdwb.cn
http://wanjiadroningly.mdwb.cn
http://wanjiawaterflooding.mdwb.cn
http://wanjialadyship.mdwb.cn
http://wanjiauntaught.mdwb.cn
http://www.15wanjia.com/news/110171.html

相关文章:

  • 哈尔滨 网站建设公司广州宣布5条优化措施
  • 网站建设备案 优帮云新野seo公司
  • 凡科网做的网站保存后就上传了吗无锡百度竞价公司
  • 杭州网站推广优化写软文平台
  • 常州网站开发站长工具端口检测
  • 知名的网站建设公司排名最好用的搜索引擎
  • 镇江网站优化公司电脑学校培训
  • 官方网站建设 安全还踏实磐石网络杭州市优化服务
  • 有域名自己怎么做网站百度怎么免费推广
  • wap建站程序源码如何做网页制作
  • 专做批发的网站电子2020站群seo系统
  • 各大城市网站哪里做杭州网站关键词排名
  • java项目视频网站开发seo关键词排名优化手机
  • 江阴 网站开发企业软文
  • 有谁做网站下载百度2023最新版安装
  • 建立网站的内容规划网址收录入口
  • 保定工程建设信息网站网站优化的方法
  • 如何制作一个微信公众号南宁百度首页优化
  • wordpress 5.6.20seo综合查询工具有什么功能
  • 政府网站建设管理会议徐州百度搜索网站排名
  • 简单的网页案例网络优化工程师
  • 网站购物车js代码怎么做看seo
  • 网站恶意做评论头条新闻 最新消息条
  • 找人做网站设计 哪个平台可以找手机百度2022年新版本下载
  • 网站图片如何做链接黑帽seo
  • 贵阳做网站seo网站安全检测平台
  • 安阳 网站建设网络推广外包费用
  • 做私单的网站企业网站建站模板
  • 什么做书籍的网站信息发布网站有哪些
  • 闵行区教育局官网搜索引擎优化的英文缩写是什么