Generalized search tree (GiST ) e una struttura generalizzata per l’implementazione di indici, che se opportunamente istanziata può comportarsi da diverse tipologie di albero (b+tree , r-tree )
La specifica GiST modella le query come predicati e la risoluzione di una query come la ricerca nell’albero del predicato che la soddisfa
Internamente un GiST e composto da una lista linkata di entries composte come <p,ptr>
dove p
e un predicato e ptr
un puntatore a un altra entry che soddisfa il suddetto predicato
Le api della specifica si dividono in funzioni di chiave e funzioni d’albero, le seconde richiamano le prime per implementare le operazioni di manipolazione del indice
Funzioni di chiave #
Consistent(e,q)
controlla se un data entry e consistent con un dato predicatounion(P)
restituisce il predicato che include le entry della listaP
compress(E)/decompress(E)
comprimono/decomprimono una entrypenalty(E1,E2)
restituisce il costo di inserimento della entryE1
nella entryE2
, usata come metrica per determinare la politica di inserimentopickSplit
implementa il processo decisionale per determinare dove l’albero viene splittato pages/
Funzioni d’albero #
search
implementa la ricerca dato un predicato, utilizza la funzioneconsistent
, nel caso di un b+tree la ricerca termina con il raggiungimento della prima foglia e lo scorrimento della lista (il dominio di un B+tree e totalmente ordinato)insert
inserisce un nodo nell’albero (entra in gioco anche quando ci sono entry orfane)chooseSubtree
sceglie il sottoalbero piu adatto per l’inserimento di una entrysplit
divide l’albero a seguito di un bilanciamentodelete
elimina una entry dall’alberoadjustKeys
aggiusta il valore delle chiavi dei nodi intermedi e controlla che il predicato dei figli corrisponda a quello del padre per mezzo diunion
condenseTree
effettua il reinserimento di entry orfane nell’albero