root/traduc/branches/bv747/manuel/gist.sgml

Revision 13, 9.0 kB (checked in by gleu, 3 years ago)

Suite de l'import pour le passage CVS à SVN.

Line 
1 <!--
2 $Header: /var/lib/cvs/pgsql-fr/sgml/gist.sgml,v 1.4.2.1 2005/03/14 06:02:59 guillaume Exp $
3 -->
4
5 <chapter Id="GiST">
6 <title>Index GiST</title>
7
8 <sect1 id="intro">
9  <title>Introduction</title>
10
11  <para>
12    <acronym>GiST</acronym> est un acronyme pour <foreignphrase>Generalized
13    Search Tree</foreignphrase>, c'est-à-dire arbre de recherche généralisé.
14    C'est une méthode d'accès à une structure de type arbre de manière balancée,
15    qui agit comme un modèle de base dans lequel il est possible d'implémenter
16    des schémas d'indexage arbitraire. B+-trees, R-trees et de nombreux autres
17    schémas d'indexage peuvent être implémentés avec <acronym>GiST</acronym>.
18  </para>
19
20  <para>
21   Un avantage de <acronym>GiST</acronym> est qu'il autorise le développement
22   de types de données personnalisés avec les méthodes d'accès appropriées, par
23   un expert dans le domaine des types de données, plutôt que par un expert des
24   bases de données.
25  </para>
26
27   <para>
28    Les quelques informations disponibles ici ont été récupérées du <ulink
29    url="http://gist.cs.berkeley.edu/">site web du projet d'indexage GiST de
30    l'université de Californie</ulink> et de la thèse de Marcel Kornacker,
31    <ulink url="http://citeseer.nj.nec.com/448594.html">Méthodes d'accès pour
32    les systèmes de bases de données de la prochaine génération</ulink>.
33    L'implémentation <acronym>GiST</acronym> de
34    <productname>PostgreSQL</productname> est principalement maintenu
35    par Teodor Sigaev et Oleg Bartunov. Leur site web, <ulink
36    url="http://www.sai.msu.su/~megera/postgres/gist/"></>, dispose de plus
37    d'informations.
38   </para>
39
40 </sect1>
41
42 <sect1 id="extensibility">
43  <title>Extensibilité</title>
44
45  <para>
46    Traditionnellement, implémenter une nouvelle méthode d'accès à un index
47    signifie un gros travail complexe. Il était nécessaire de comprendre les
48    fonctionnements internes de la base de données, tels que le gestionnaire de
49    verrous ou le WAL. L'interface <acronym>GiST</acronym> a un haut niveau
50    d'abstraction, demandant à l'implémenteur de la méthode d'accès de
51    n'implémenter que la sémantique du type de données en cours d'accès. La
52    couche <acronym>GiST</acronym> elle-même prend garde aux accès concurrents,
53    aux traces et à la recherche dans la structure en arbre.
54  </para>
55  
56  <para>
57    L'extensibilité ne devrait pas être confondue avec l'extensibilité des
58    autres arbres de recherche standards en termes de données qu'ils gèrent. Par
59    exemple, <productname>PostgreSQL</productname> supporte les B+-trees
60    et R-trees extensibles. Ceci signifie que vous pouvez utiliser
61    <productname>PostgreSQL</productname> pour construire un B+-tree ou un R-tree
62    sur tout type de données que vous souhaitez. Mais, les B+-trees supportent
63    seulement les prédicats sur une séquence (<literal>&lt;</literal>,
64    <literal>=</literal>, <literal>&gt;</literal>) et les R-trees supportent
65    seulement les requêtes sur les séquences n-D (contient, est contenu,
66    équivaut).
67  </para>
68  
69  <para>
70    Donc, si vous indexez, disons, une collection d'images avec un B+-tree
71    <productname>PostgreSQL</productname>, vous pouvez seulement lancer des
72    requêtes telles que <quote>est-ce que imagex est égale à imagey</quote>,
73    <quote>est-ce que imagex est plus petite que imagey</quote> et <quote>est-ce
74    que imagex est plus grande que imagey</quote>&nbsp;? Suivant votre façon de
75    définir le <quote>égal à</quote>, le <quote>inférieur à</quote> ou le
76    <quote>supérieur à</quote> dans ce contexte, cela peut être utile.
77    Néanmoins, en utilisant un index basé sur <acronym>GiST</acronym>, vous
78    pouvez créer des moyens de poser des questions spécifiques au domaine,
79    peut-être <quote>trouver toutes les images de chevaux</quote> ou
80    <quote>trouver toutes les images sur-exposées</quote>.
81  </para>
82
83  <para>
84    Tout ce qui est nécessaire pour obtenir une méthode d'accès
85    <acronym>GiST</acronym> fonctionnelle est d'implémenter sept méthodes
86    définies par l'utilisateur, qui définissent le comportement des clés dans
87    l'arbre. Bien sûr, ces méthodes doivent être particulièrement élaborées
88    pour supporter des requêtes avancées mais pour toutes les requêtes standards
89    (B+-trees, R-trees, etc.) elles sont relativement simples. En bref,
90    <acronym>GiST</acronym> combine l'extensibilité avec la généralité, la
91    ré-utilisation de code et une interface propre.
92   </para>
93
94 </sect1>
95
96 <sect1 id="implementation">
97  <title>Implémentation</title>
98  
99  <para>
100    Il existe sept méthodes qu'une classe d'opérateur d'index doit fournir pour
101    <acronym>GiST</acronym>&nbsp;:
102  </para>
103
104  <variablelist>
105     <varlistentry>
106      <term>consistent</term>
107      <listitem>
108       <para>
109        Suivant un prédicat <literal>p</literal> sur une page de l'arbre et une
110        requête utilisateur, <literal>q</literal>, cette méthode doit renvoyer
111        false s'il est certain qu'à la fois <literal>p</literal> et
112        <literal>q</literal> ne peuvent pas être vrais pour un élément de
113        données spécifié.
114       </para>
115      </listitem>
116     </varlistentry>
117
118     <varlistentry>
119      <term>union</term>
120      <listitem>
121       <para>
122        Cette méthode consolide les informations de l'arbre. Suivant une liste
123        d'entrées, cette fonction génère un nouveau prédicat qui est vrai pour
124        toutes les entrées.
125       </para>
126      </listitem>
127     </varlistentry>
128
129     <varlistentry>
130      <term>compress</term>
131      <listitem>
132       <para>
133        Convertit l'élément de données en un format convenable pour l'emplacement
134        physique dans une page d'index.
135       </para>
136      </listitem>
137     </varlistentry>
138
139     <varlistentry>
140      <term>decompress</term>
141      <listitem>
142       <para>
143        L'inverse de la fonction <function>compress</function>. Convertit la
144        représentation de l'élément donné en un format manipulable par la base
145        de données.
146       </para>
147      </listitem>
148     </varlistentry>
149
150     <varlistentry>
151      <term>penalty</term>
152      <listitem>
153       <para>
154        Renvoie une valeur indiquant le <quote>coût</quote> d'une insertion
155        d'une nouvelle entrée dans une branche particulière de l'arbre. Les
156        éléments seront insérés en bas du chemin de la plus petite pénalité
157        (<function>penalty</function>) de l'arbre.
158       </para>
159      </listitem>
160     </varlistentry>
161
162     <varlistentry>
163      <term>picksplit</term>
164      <listitem>
165       <para>
166        Quand une séparation de page est nécessaire, cette fonction décide des
167        entrées qui resteront sur l'ancienne page et de celles qui seront
168        déplacées sur la nouvelle.
169       </para>
170      </listitem>
171     </varlistentry>
172
173     <varlistentry>
174      <term>same</term>
175      <listitem>
176       <para>
177        Renvoie true si deux entrées sont identiques, false autrement.
178       </para>
179      </listitem>
180     </varlistentry>
181
182   </variablelist>
183
184 </sect1>
185
186 <sect1 id="limitations">
187  <title>Limitations</title>
188
189  <para>
190   L'implémentation actuelle de <acronym>GiST</acronym> dans
191   <productname>PostgreSQL</productname> a quelques grosses limitations&nbsp;:
192   l'accès de <acronym>GiST</acronym> n'est pas concurrent&nbsp;; l'interface de
193   <acronym>GiST</acronym> ne permet pas le développement de certains types de
194   données, tels que les arbres numériques (voir les papiers d'Aoki)&nbsp;; et
195   il n'existe pas encore de support pour les WAL de mises à jour dans les
196   index <acronym>GiST</acronym>.
197  </para>
198
199  <para>
200   Les solutions aux problèmes de concurrence apparaissent dans la thèse de
201   Marcel Kornacker&nbsp;; néanmoins, ces idées n'ont pas encore été mises en
202   pratiques dans l'implémentation de <productname>PostgreSQL</productname>.
203  </para>
204
205  <para>
206   Le manque de WAL est un simple soucis de programmation mais comme cela n'a pas
207   encore été fait, un arrêt brutal pourrait rendre un index
208   <acronym>GiST</acronym> inconsistant, forçant le lancement d'un REINDEX.
209  </para>
210
211 </sect1>
212
213 <sect1 id="examples">
214  <title>Exemples</title>
215
216  <para>
217   Pour voir les exemples d'implémentations de méthodes d'indexage utilisant
218   <acronym>GiST</acronym>, examinez les modules contrib suivants&nbsp;:
219  </para>
220  
221  <variablelist>
222   <varlistentry>
223    <term>btree_gist</term>
224    <listitem>
225     <para>B-Tree</para>
226    </listitem>
227   </varlistentry>
228
229   <varlistentry>
230    <term>cube</term>
231    <listitem>
232     <para>Indexage de cube multi-dimensionnel</para>
233    </listitem>
234   </varlistentry>
235
236   <varlistentry>
237    <term>intarray</term>
238    <listitem>
239     <para>RD-Tree pour un tableau à une dimension de valeurs int4</para>
240    </listitem>
241   </varlistentry>
242
243   <varlistentry>
244    <term>ltree</term>
245    <listitem>
246     <para>Indexage des structures de type arbre</para>
247    </listitem>
248   </varlistentry>
249
250   <varlistentry>
251    <term>rtree_gist</term>
252    <listitem>
253     <para>R-Tree</para>
254    </listitem>
255   </varlistentry>
256
257   <varlistentry>
258    <term>seg</term>
259    <listitem>
260     <para>Stockage et accès indexé pour les <quote>nombres
261      flottants</quote></para>
262    </listitem>
263   </varlistentry>
264
265   <varlistentry>
266    <term>tsearch and tsearch2</term>
267    <listitem>
268     <para>Indexage de texte complet</para>
269    </listitem>
270   </varlistentry>
271  </variablelist>
272
273 </sect1>
274
275 </chapter>
Note: See TracBrowser for help on using the browser.