Bloom filter are used to greatly reduce the amount of straw when you&#x27;re looking for a needle in a haystack.<p>Take bup (<a href="https:&#x2F;&#x2F;github.com&#x2F;bup&#x2F;bup&#x2F;" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;bup&#x2F;bup&#x2F;</a>) for instance. It splits your content into chunks and stores them into GB-sized packs. With large backups you easily end up in hundreds of packs. During the splitting process it needs to search for a hash (the needle) into the huge amount of chunks (the haystack). That&#x27;s why bup has one bloom filter per pack, which means that instead of searching through hundreds of packs you will have to search through maybe 2 or 3 packs. There are false positives (you know a hash can only realistically be contained in a single pack) but it is you the developer who choose how much you want. There is some complicated math that allows you to balance false positives, size of the structure, and expected number of elements.<p>There&#x27;s a similar process inside LevelDB (<a href="http:&#x2F;&#x2F;leveldb.org&#x2F;" rel="nofollow">http:&#x2F;&#x2F;leveldb.org&#x2F;</a>) and it&#x27;s going to be the same thing for systems that store their data in multiple parts and know that what they&#x27;re looking for actually is in a single part.