Documentation PostgreSQL 8.1.23 > Internes > Index GiST > Extensibilité | |
Index GiST | Implémentation |
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 R-trees extensibles. Ceci signifie que vous pouvez utiliser PostgreSQL™ pour construire un B+-tree ou un R-tree sur tout type de données que vous souhaitez. Mais, les B+-trees supportent seulement les prédicats sur une séquence (<, =, >) et les R-trees supportent seulement les requêtes sur les séquences n-D (contient, est contenu, équivaut).
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.