C comments: improve description of GiST NSN and GistBuildLSN
GiST indexes are complex, so adding more details in the code might help someone. Discussion: https://postgr.es/m/20210302164021.GA364@momjian.us
This commit is contained in:
parent
d87251048a
commit
845ac7f847
@ -10,6 +10,7 @@ GiST stands for Generalized Search Tree. It was introduced in the seminal paper
|
|||||||
Jeffrey F. Naughton, Avi Pfeffer:
|
Jeffrey F. Naughton, Avi Pfeffer:
|
||||||
|
|
||||||
http://www.sai.msu.su/~megera/postgres/gist/papers/gist.ps
|
http://www.sai.msu.su/~megera/postgres/gist/papers/gist.ps
|
||||||
|
https://dsf.berkeley.edu/papers/sigmod97-gist.pdf
|
||||||
|
|
||||||
and implemented by J. Hellerstein and P. Aoki in an early version of
|
and implemented by J. Hellerstein and P. Aoki in an early version of
|
||||||
PostgreSQL (more details are available from The GiST Indexing Project
|
PostgreSQL (more details are available from The GiST Indexing Project
|
||||||
|
@ -51,13 +51,20 @@
|
|||||||
#define F_HAS_GARBAGE (1 << 4) /* some tuples on the page are dead,
|
#define F_HAS_GARBAGE (1 << 4) /* some tuples on the page are dead,
|
||||||
* but not deleted yet */
|
* but not deleted yet */
|
||||||
|
|
||||||
/* NSN - node sequence number, a special-purpose LSN */
|
/*
|
||||||
|
* NSN (node sequence number) is a special-purpose LSN which is stored on each
|
||||||
|
* index page in GISTPageOpaqueData and updated only during page splits. By
|
||||||
|
* recording the parent's LSN in GISTSearchItem.parentlsn, it is possible to
|
||||||
|
* detect concurrent child page splits by checking if parentlsn < child's NSN,
|
||||||
|
* and handle them properly. The child page's LSN is insufficient for this
|
||||||
|
* purpose since it is updated for every page change.
|
||||||
|
*/
|
||||||
typedef XLogRecPtr GistNSN;
|
typedef XLogRecPtr GistNSN;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A bogus LSN / NSN value used during index build. Must be smaller than any
|
* A fake LSN / NSN value used during index builds. Must be smaller than any
|
||||||
* real or fake unlogged LSN, so that after an index build finishes, all the
|
* real or fake (unlogged) LSN generated after the index build completes so
|
||||||
* splits are considered completed.
|
* that all splits are considered complete.
|
||||||
*/
|
*/
|
||||||
#define GistBuildLSN ((XLogRecPtr) 1)
|
#define GistBuildLSN ((XLogRecPtr) 1)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user