bloom filter在缓存中的应用?假阳性率计算?bloom filter在缓存中的应用?假阳性率计算?
Bloom filter:位数组 + k 个哈希函数;插入时把 k 个位置置 1,查询时 k 个位置全为 1 则「可能存在」(有假阳性),任一为 0 则「一定不存在」。在缓存中用于前置过滤:先查 Bloom filter,若为「不存在」则不必访问缓存或 DB,减少穿透;若为「可能存在」再查缓存/DB。
设位数组长 m、元素数 n、哈希函数数 k。近似假阳性率 p ≈ (1 - e^(-kn/m))^k。在 n 给定下,取 k = (m/n) ln 2 时 p 最小,约 0.6185^(m/n)。故 m 越大、n 越少,假阳性率越低;工程上常取 m/n 为 10~20、k 据此计算。
不支持删除(除非用 counting Bloom filter);假阳性可接受时能大幅减少无效查询。常用于缓存/DB 前、去重、爬虫已访问集合等。
| 返回模块 | 返回总览 |