Teach radix tree to embed values at runtime Previously, the decision to store values in leaves or within the child pointer was made at compile time, with variable length values using leaves by necessity. This commit allows introspecting the length of variable length values at runtime for that decision. This requires the ability to tell whether the last-level child pointer is actually a value, so we use a pointer tag in the lowest level bit.
Use this in TID store. This entails adding a byte to the header to reserve space for the tag. Commit f35bd9bf3 stores up to three offsets within the header with no bitmap, and now the header can be embedded as above. This reduces worst-case memory usage when TIDs are sparse. Reviewed (in an earlier version) by Masahiko Sawada Discussion: https://postgr.es/m/CANWCAZYw+_KAaUNruhJfE=h6wgtbkedg32st8vbjbey82bg...@mail.gmail.com Discussion: https://postgr.es/m/cad21aobci3hujzijubomo1tdwh3xtq9f89ctnq4bsqijomq...@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/0fe5f64367bc2fc70baa1f0f993638830f8aa6a5 Modified Files -------------- src/backend/access/common/tidstore.c | 81 +++++++++++++++++++++++++----------- src/include/lib/radixtree.h | 32 ++++++++++++++ 2 files changed, 89 insertions(+), 24 deletions(-)