实现原理
什么是布隆过滤器
- 概率型数据结构(probabilistic data structure)
- 高效地插入和查询
- 可以用来告诉你 “某样东西一定不存在或者可能存在”。
HashMap问题
- 考虑负载因子,空间利用率不高
- 内存空间
布隆过滤器数据结构
bit向量或bit数组
对同一数据,使用多个hash函数计算hash值,将bit数组对应哈希值的index置1
因此某个index非1则一定不存在,所有index为1则可能存在
布隆过滤器特点
- 不可删除
hash函数个数及过滤器长度
- hash个数越多,越容易填满过滤器。个数过少则增加误报
- 过滤器越长误报率越小
最佳实践
- 使用更优秀的hash算法 MurmurHash FNV
- 拆分大Value时,不要将 Hash(Key) 之后的请求分散在多个节点的多个小 bitmap 上,而是应该拆分成多个小 bitmap 之后,对一个 Key 的所有哈希函数都落在这一个小 bitmap 上。