Blocked Bloom Filter

  • We select a memory block first.
  • Then we select local Bloom Filter within each block.
  • It might cause imbalance between memory blocks
  • This filter is efficient, but poor false positive rate(FPR).
  • At first instance, blocked Bloom filters should have the same FPR (False Positive Rate) as standard Bloom filters of the same size.
  • Blocked Bloom Filter consists of a sequence of block b comparatively less than standard Bloom filters (Bloom filter blocks), each of which fits into one cache-line.
  • Blocked Bloom filter scheme is differentiated from the partition schemes, where each bit is inserted into a different block.

Blocked Bloom Filter is implemented in following ways −

Bit Patterns (pat)

In this topic, we discuss to implement blocked Bloom filters implementing precomputed bit patterns. Instead of setting k bits through the evaluation of k hash functions, a single hash function selects a precomputed pattern from a table of random k-bit pattern of width B. In many cases, this table will fit into the cache. With this solution, only one small (in terms of bits) hash value is required, and the operation can be implemented using few SIMD(Single Instruction Multiple Data)instructions. At the time of transferring the Bloom filter, the table need not be included explicitly in the data, but can be reconstructed implementing the seed value.

The main disadvantage of the bit pattern method is that two elements may cause a table collision when they are hashed to the same pattern. This causes increased FPR.

Multiplexing Patterns

To refine this idea once more, we can achieve a larger variety of patterns from a single table by bitwise-or-ing x patterns with an average number of k/x set bits.


One more variant that helps improving the FPR, is denoted as called multi-blocking. We permit the query operation to access X Bloom filters blocks, setting or testing k/X bits respectively in each block. (When k is not divisible by X, we set an extra bit in the first k mod X blocks.) Multi-blocking performs better than just increasing the block size to XB (B-each block size), since more variety is introduced this way. If we divide the set bits among several blocks, the expected number of 1 bit per block remains the same. However, only k/X bits are considered in each participating block, when accessing an element.