Traditionnellement, implémenter une nouvelle méthode d'accès à un
index signifie un gros travail complexe. Il était nécessaire de
comprendre les fonctionnements internes de la base de données, tels
que le gestionnaire de verrous ou le WAL. L'interface GiST a un haut niveau d'abstraction, demandant à
l'implémenteur de la méthode d'accès de n'implémenter que la
sémantique du type de données en cours d'accès. La couche
GiST elle-même prend garde aux
accès concurrents, aux traces et à la recherche dans la structure en
arbre.
L'extensibilité ne devrait pas être confondue avec l'extensibilité
des autres arbres de recherche standards en termes de données qu'ils
gèrent. Par exemple, PostgreSQL™ supporte les B-trees et les
index hash. Ceci signifie que vous pouvez utiliser PostgreSQL™ pour construire un B-tree ou
un hachage sur tout type de données que vous souhaitez. Mais, les
B-trees supportent seulement les prédicats sur une séquence
(<, =,
>) et les index hash supportent seulement
les requêtes d'égalité.
Donc, si vous indexez, disons, une collection d'images avec un B-tree
PostgreSQL™, vous pouvez
seulement lancer des requêtes telles que « est-ce que imagex est égale à imagey »,
« est-ce que imagex est plus petite que
imagey » et « est-ce que imagex
est plus grande que imagey » ? Suivant votre façon de
définir le « égal à », le
« inférieur à » ou le
« supérieur à » dans ce
contexte, cela peut être utile. Néanmoins, en utilisant un index basé
sur GiST, vous pouvez créer des
moyens de poser des questions spécifiques au domaine, peut-être
« trouver toutes les images de
chevaux » ou « trouver toutes
les images sur-exposées ».
Tout ce qui est nécessaire pour obtenir une méthode d'accès
GiST fonctionnelle est
d'implémenter sept méthodes définies par l'utilisateur, qui
définissent le comportement des clés dans l'arbre. Bien sûr, ces
méthodes doivent être particulièrement élaborées pour supporter des
requêtes avancées mais pour toutes les requêtes standards (B-trees,
R-trees, etc.) elles sont relativement simples. En bref,
GiST combine l'extensibilité avec
la généralité, la ré-utilisation de code et une interface propre.