1
0
mirror of https://github.com/postgres/postgres.git synced 2025-12-21 05:21:08 +03:00

Comment improvements for abbreviated keys.

Peter Geoghegan and Robert Haas
This commit is contained in:
Robert Haas
2015-12-22 13:57:18 -05:00
parent ccd8f97922
commit 0ba3f3bc65
2 changed files with 31 additions and 23 deletions

View File

@@ -116,24 +116,25 @@ typedef struct SortSupportData
*
* This allows opclass authors to supply a conversion routine, used to
* create an alternative representation of the underlying type (an
* "abbreviated key"). Typically, this representation is an ad-hoc,
* pass-by-value Datum format that only the opclass has knowledge of. An
* alternative comparator, used only with this alternative representation
* must also be provided (which is assigned to "comparator"). This
* representation is a simple approximation of the original Datum. It
* must be possible to compare datums of this representation with each
* other using the supplied alternative comparator, and have any non-zero
* return value be a reliable proxy for what a proper comparison would
* indicate. Returning zero from the alternative comparator does not
* indicate equality, as with a conventional support routine 1, though --
* it indicates that it wasn't possible to determine how the two
* abbreviated values compared. A proper comparison, using
* "abbrev_full_comparator"/ ApplySortAbbrevFullComparator() is therefore
* required. In many cases this results in most or all comparisons only
* using the cheap alternative comparison func, which is typically
* implemented as code that compiles to just a few CPU instructions. CPU
* cache miss penalties are expensive; to get good overall performance,
* sort infrastructure must heavily weigh cache performance.
* "abbreviated key"). This representation must be pass-by-value and
* typically will use some ad-hoc format that only the opclass has
* knowledge of. An alternative comparator, used only with this
* alternative representation must also be provided (which is assigned to
* "comparator"). This representation is a simple approximation of the
* original Datum. It must be possible to compare datums of this
* representation with each other using the supplied alternative
* comparator, and have any non-zero return value be a reliable proxy for
* what a proper comparison would indicate. Returning zero from the
* alternative comparator does not indicate equality, as with a
* conventional support routine 1, though -- it indicates that it wasn't
* possible to determine how the two abbreviated values compared. A
* proper comparison, using "abbrev_full_comparator"/
* ApplySortAbbrevFullComparator() is therefore required. In many cases
* this results in most or all comparisons only using the cheap
* alternative comparison func, which is typically implemented as code
* that compiles to just a few CPU instructions. CPU cache miss penalties
* are expensive; to get good overall performance, sort infrastructure
* must heavily weigh cache performance.
*
* Opclass authors must consider the final cardinality of abbreviated keys
* when devising an encoding scheme. It's possible for a strategy to work