如何Use Bloom Filters
Use probabilistic Bloom filters 为内存-高效集合 membership testing.
问题
你需要检查是否项 是在 大集合, 但 storing 完整集合在 内存是 too expensive.
前置条件
- Understanding 的 hash 函数
- Knowledge 的 probabilistic 数据 structures
步骤
-
1. Size the filter
Choose the expected number of items (n) and the desired false positive rate (p). The optimal number of bits (m) and hash functions (k) are derived from these: m = -n*ln(p)/(ln(2)^2), k = (m/n)*ln(2). For 1 million items at 1% FPR, you need about 1.19 MB.
输入n=1M, p=0.01输出m=9.6M bits, k=7 -
2. Add items to the filter
To add an item, compute k hash values and set the corresponding k bits in the bit array. The same item always sets the same bits. Adding is O(k) and never fails.
输入add 'apple'输出set bits at h1..h7 -
3. Test membership
To test if an item is in the set, compute the k hash values and check if all corresponding bits are set. If any bit is 0, the item is definitely not in the set. If all bits are 1, the item is probably in the set (with false positive rate p). Bloom filters never produce false negatives.
输入test 'banana'输出probably present / definitely absent
预期结果
内存-高效结构该 tests 集合 membership 具有否 假负 和 controlled 假正 速率.
常见错误
- Treating a positive result as certain
- Bloom filters have false positives. A positive means 'probably in the set'. Always verify with the actual data if exactness is required.
- Too many items for the filter size
- If the number of items exceeds the design capacity, the false positive rate increases. Re-size the filter or use a counting Bloom filter.
排障指引
- If the false positive rate is too high, increase the bit array size or the number of hash functions.
- Bloom filters cannot remove items. Use a counting Bloom filter if deletion is needed.
安全限制
- Bloom filters are probabilistic. Never use them for security-critical membership decisions without a fallback verification.
- This is an educational explanation.