Add Bloom filter implementation.
authorAndres Freund <andres@anarazel.de>
Sun, 1 Apr 2018 00:49:41 +0000 (17:49 -0700)
committerAndres Freund <andres@anarazel.de>
Sun, 1 Apr 2018 00:49:41 +0000 (17:49 -0700)
commit51bc271790eb234a1ba4d14d3e6530f70de92ab5
treeb97cc7b4a80b6b288a532aa8907ef4eb28b0ce0a
parented69864350a59c51c8570900601ebd335956b638
Add Bloom filter implementation.

A Bloom filter is a space-efficient, probabilistic data structure that
can be used to test set membership.  Callers will sometimes incur false
positives, but never false negatives.  The rate of false positives is a
function of the total number of elements and the amount of memory
available for the Bloom filter.

Two classic applications of Bloom filters are cache filtering, and data
synchronization testing.  Any user of Bloom filters must accept the
possibility of false positives as a cost worth paying for the benefit in
space efficiency.

This commit adds a test harness extension module, test_bloomfilter.  It
can be used to get a sense of how the Bloom filter implementation
performs under varying conditions.

This is infrastructure for the upcoming "heapallindexed" amcheck patch,
which verifies the consistency of a heap relation against one of its
indexes.

Author: Peter Geoghegan
Reviewed-By: Andrey Borodin, Michael Paquier, Thomas Munro, Andres Freund
Discussion: https://postgr.es/m/CAH2-Wzm5VmG7cu1N-H=nnS57wZThoSDQU+F5dewx3o84M+jY=g@mail.gmail.com
14 files changed:
src/backend/lib/Makefile
src/backend/lib/README
src/backend/lib/bloomfilter.c [new file with mode: 0644]
src/include/lib/bloomfilter.h [new file with mode: 0644]
src/test/modules/Makefile
src/test/modules/test_bloomfilter/.gitignore [new file with mode: 0644]
src/test/modules/test_bloomfilter/Makefile [new file with mode: 0644]
src/test/modules/test_bloomfilter/README [new file with mode: 0644]
src/test/modules/test_bloomfilter/expected/test_bloomfilter.out [new file with mode: 0644]
src/test/modules/test_bloomfilter/sql/test_bloomfilter.sql [new file with mode: 0644]
src/test/modules/test_bloomfilter/test_bloomfilter--1.0.sql [new file with mode: 0644]
src/test/modules/test_bloomfilter/test_bloomfilter.c [new file with mode: 0644]
src/test/modules/test_bloomfilter/test_bloomfilter.control [new file with mode: 0644]
src/tools/pgindent/typedefs.list