mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 06:41:17 +02:00
df816f6ad5
The set is implemented as a B-tree, with a compact representation at leaf items, using Simple-8b algorithm, so that clusters of nearby values use less memory. The IntegerSet isn't used for anything yet, aside from the test code, but we have two patches in the works that would benefit from this: A patch to allow GiST vacuum to delete empty pages, and a patch to reduce heap VACUUM's memory usage, by storing the list of dead TIDs more efficiently and lifting the 1 GB limit on its size. This includes a unit test module, in src/test/modules/test_integerset. It can be used to verify correctness, as a regression test, but if you run it manully, it can also print memory usage and execution time of some of the tests. Author: Heikki Linnakangas, Andrey Borodin Reviewed-by: Julien Rouhaud Discussion: https://www.postgresql.org/message-id/b5e82599-1966-5783-733c-1a947ddb729f@iki.fi
36 lines
1.2 KiB
Plaintext
36 lines
1.2 KiB
Plaintext
This directory contains a general purpose data structures, for use anywhere
|
|
in the backend:
|
|
|
|
binaryheap.c - a binary heap
|
|
|
|
bipartite_match.c - Hopcroft-Karp maximum cardinality algorithm for bipartite graphs
|
|
|
|
bloomfilter.c - probabilistic, space-efficient set membership testing
|
|
|
|
dshash.c - concurrent hash tables backed by dynamic shared memory areas
|
|
|
|
hyperloglog.c - a streaming cardinality estimator
|
|
|
|
ilist.c - single and double-linked lists
|
|
|
|
integerset.c - a data structure for holding large set of integers
|
|
|
|
knapsack.c - knapsack problem solver
|
|
|
|
pairingheap.c - a pairing heap
|
|
|
|
rbtree.c - a red-black tree
|
|
|
|
stringinfo.c - an extensible string type
|
|
|
|
|
|
Aside from the inherent characteristics of the data structures, there are a
|
|
few practical differences between the binary heap and the pairing heap. The
|
|
binary heap is fully allocated at creation, and cannot be expanded beyond the
|
|
allocated size. The pairing heap on the other hand has no inherent maximum
|
|
size, but the caller needs to allocate each element being stored in the heap,
|
|
while the binary heap works with plain Datums or pointers.
|
|
|
|
The linked-lists in ilist.c can be embedded directly into other structs, as
|
|
opposed to the List interface in nodes/pg_list.h.
|