Changeset 943
- Timestamp:
- 03/14/08 09:39:36 (10 months ago)
- Files:
-
- traduc/trunk/postgresql/gist.xml (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
traduc/trunk/postgresql/gist.xml
r942 r943 52 52 <title>Extensibilité</title> 53 53 54 <!-- ICI --> 55 <para> 56 Traditionnellement, implanter une nouvelle méthode d'accès à un index 57 signifie un gros travail complexe. Il était nécessaire de comprendre les 58 fonctionnements internes de la base de données, tels que le gestionnaire de 59 verrous ou le WAL. L'interface <acronym>GiST</acronym> a un haut niveau 60 d'abstraction, demandant au codeur de la méthode d'accès de 61 ne coder que la sémantique du type de données en cours d'accès. La 62 couche <acronym>GiST</acronym> elle-même prend garde aux accès concurrents, 63 aux traces et à la recherche dans la structure en arbre. 64 </para> 65 66 <para> 67 L'extensibilité ne devrait pas être confondue avec l'extensibilité des 68 autres arbres de recherche standards en termes de données qu'ils gèrent. Par 54 <para> 55 L'implantation d'une nouvelle méthode d'accès à un index 56 a toujours été un travail complexe. Il est, en effet, nécessaire de comprendre le 57 fonctionnement interne de la base de données, tel que le gestionnaire de 58 verrous ou le WAL. 59 </para> 60 <para> 61 L'interface <acronym>GiST</acronym> dispose d'un haut niveau 62 d'abstraction, ce qui autorise le codeur de la méthode d'accès à 63 ne coder que la sémantique du type de données accédé. La 64 couche <acronym>GiST</acronym> se charge elle-même de la gestion des accès concurrents, 65 des traces et de la recherche dans la structure en arbre. 66 </para> 67 68 <para> 69 Cette extensibilité n'est pas comparable à celle des 70 autres arbres de recherche standard en termes de données gérées. Par 69 71 exemple, <productname>PostgreSQL</productname> supporte les B-trees et les 70 index hash . Ceci signifie que vous pouvezutiliser72 index hash extensibles. Cela signifie qu'il est possible d'utiliser 71 73 <productname>PostgreSQL</productname> pour construire un B-tree ou un hachage 72 sur tout type de données que vous souhaitez. Mais, les B-treessupportent73 seulement les prédicats sur une séquence (<literal><</literal>,74 <literal>=</literal>, <literal>></literal>) et les index hashsupportent75 seulementles requêtes d'égalité.76 </para> 77 78 <para> 79 Donc, si vous indexez, disons, une collection d'imagesavec un B-tree80 <productname>PostgreSQL</productname>, vous pouvez seulement lancer des81 requêtes telles que<quote>est-ce que imagex est égale à imagey</quote>,74 sur tout type de données. Mais, les B-trees ne supportent 75 que les prédicats d'échelle (<literal><</literal>, 76 <literal>=</literal>, <literal>></literal>), les index hash ne supportent 77 que les requêtes d'égalité. 78 </para> 79 80 <para> 81 Donc, lors de l'indexation d'une collection d'images, par exemple, avec un B-tree 82 <productname>PostgreSQL</productname>, seules peuvent être lancées des requêtes de type 83 <quote>est-ce que imagex est égale à imagey</quote>, 82 84 <quote>est-ce que imagex est plus petite que imagey</quote> et <quote>est-ce 83 que imagex est plus grande que imagey</quote> ? Suivant votre façon de84 d éfinir le <quote>égal à</quote>, le <quote>inférieur à</quote> ou le85 <quote>supérieur à</quote> dans ce contexte, cela peut être utile.86 Néanmoins, en utilisant un index basé sur <acronym>GiST</acronym>, vous87 pouvez créer des moyens de poser des questions spécifiques au domaine,88 peut-être <quote>trouver toutes les images de chevaux</quote> ou85 que imagex est plus grande que imagey</quote>. En fonction de la définition 86 donnée à <quote>égal à</quote>, <quote>inférieur à</quote> ou 87 <quote>supérieur à</quote>, cela peut être utile. 88 Néanmoins, l'utilisation d'un index basé sur <acronym>GiST</acronym> permet 89 de créer de nombreuses possibilités de poser des questions spécifiques au domaine, 90 telles que <quote>trouver toutes les images de chevaux</quote> ou 89 91 <quote>trouver toutes les images sur-exposées</quote>. 90 92 </para> 91 93 92 94 <para> 93 Tout ce qui est nécessaire pour obtenir une méthode d'accès94 <acronym>GiST</acronym> fonctionnelle est d'implémenter sept méthodes95 définies par l'utilisateur, qui définissent le comportement des clés dans96 l'arbre. Bien sûr, ces méthodes doivent être particulièrement élaborées97 pour supporter des requêtes avancées mais pour toutes les requêtes standards95 Pour obtenir une méthode d'accès 96 <acronym>GiST</acronym> fonctionnelle, il suffit de coder sept méthodes 97 utilisateur définissant le comportement des clés dans 98 l'arbre. Ces méthodes doivent être suffisamment élaborées 99 pour supporter des requêtes avancées, mais pour toutes les requêtes standard 98 100 (B-trees, R-trees, etc.) elles sont relativement simples. En bref, 99 <acronym>GiST</acronym> combine l'extensibilité avec la généralité, la100 ré-utilisation de code et une interface propre.101 <acronym>GiST</acronym> combine extensibilité, généralité, 102 ré-utilisation de code et interface claire. 101 103 </para> 102 104 … … 104 106 105 107 <sect1 id="gist-implementation"> 106 <title>Impl émentation</title>107 108 <para> 109 Il existe sept méthodes qu'une classe d'opérateur d'index doit fournir pour110 <acronym>GiST</acronym> :108 <title>Implantation</title> 109 110 <para> 111 Une classe d'opérateur d'index <acronym>GiST</acronym> doit fournir sept 112 méthodes : 111 113 </para> 112 114 … … 116 118 <listitem> 117 119 <para> 118 Suivant un prédicat <literal>p</literal> surune page de l'arbre et une119 requête utilisateur , <literal>q</literal>, cette méthode doit renvoyer120 fa lse s'il est certain qu'à la fois <literal>p</literal> et121 <literal>q</literal> ne peuvent pas êtrevrais pour un élément de122 données spécifié.120 Pour un prédicat <literal>p</literal> d'une page de l'arbre et une 121 requête utilisateur <literal>q</literal> données, cette méthode retourne 122 faux si <literal>p</literal> et <literal>q</literal> ne peuvent pas 123 être simultanément vrais pour un élément de 124 données particulier. 123 125 </para> 124 126 </listitem> … … 129 131 <listitem> 130 132 <para> 131 Cette méthode consolide les informations de l'arbre. Suivantune liste132 d'entrées , cette fonction génère un nouveau prédicat qui est vrai pour133 Cette méthode consolide les informations de l'arbre. Pour une liste 134 d'entrées donnée, cette fonction produit un nouveau prédicat vrai pour 133 135 toutes les entrées. 134 136 </para> … … 140 142 <listitem> 141 143 <para> 142 Convertit l'élément de données en un format convenable pour l'emplacement143 physique dans une page d'index.144 Convertit l'élément de données dans un format compatible avec 145 le stockage physique dans une page d'index. 144 146 </para> 145 147 </listitem> … … 151 153 <para> 152 154 L'inverse de la fonction <function>compress</function>. Convertit la 153 représentation de l'élément d onnéen un format manipulable par la base155 représentation de l'élément de donnée en un format manipulable par la base 154 156 de données. 155 157 </para> … … 161 163 <listitem> 162 164 <para> 163 Renvoie une valeur indiquant le <quote>coût</quote> d' uneinsertion165 Renvoie une valeur indiquant le <quote>coût</quote> d'insertion 164 166 d'une nouvelle entrée dans une branche particulière de l'arbre. Les 165 éléments seront insérés en bas du chemin de la plus petite pénalité167 éléments seront insérés dans l'ordre des pénalités moindres 166 168 (<function>penalty</function>) de l'arbre. 167 169 </para> … … 173 175 <listitem> 174 176 <para> 175 Quand une séparationde page est nécessaire, cette fonction décide des176 entrées qui reste ront sur l'ancienne page et de celles qui seront177 Quand une coupure de page est nécessaire, cette fonction décide des 178 entrées qui restent sur l'ancienne page et de celles 177 179 déplacées sur la nouvelle. 178 180 </para> … … 184 186 <listitem> 185 187 <para> 186 Renvoie true si deux entrées sont identiques, falseautrement.188 Renvoie vrai si deux entrées sont identiques, faux autrement. 187 189 </para> 188 190 </listitem> … … 198 200 <para> 199 201 La distribution source de <productname>PostgreSQL</productname> inclut 200 plusieurs exemples de méthodes d'indexa ge implémentées en utilisant202 plusieurs exemples de méthodes d'indexation implantées selon 201 203 <acronym>GiST</acronym>. Le système principal fournit des fonctionnalités 202 text search 203 support (indexing for <type>tsvector</type> and <type>tsquery</type>) as well as équivalents à R-Tree pour certains des types de données géométriques 204 de recherche plein texte (indexation des <type>tsvector</type> et 205 <type>tsquery</type>) ainsi que des fonctionnalités équivalentes aux R-Tree 206 pour certains types de données géométriques 204 207 (voir <filename>src/backend/access/gist/gistproc.c</filename>). Les modules 205 208 <filename>contrib</filename> suivants contiennent aussi des classes d'opérateur … … 219 222 <term>cube</term> 220 223 <listitem> 221 <para>Indexa ge de cube multi-dimensionnel</para>224 <para>Indexation de cubes multi-dimensionnels</para> 222 225 </listitem> 223 226 </varlistentry> … … 233 236 <term>intarray</term> 234 237 <listitem> 235 <para>RD-Tree pour un tableau à une dimensionde valeurs int4</para>238 <para>RD-Tree pour tableaux uni-dimensionnels de valeurs int4</para> 236 239 </listitem> 237 240 </varlistentry> … … 240 243 <term>ltree</term> 241 244 <listitem> 242 <para>Indexa gedes structures de type arbre</para>245 <para>Indexation des structures de type arbre</para> 243 246 </listitem> 244 247 </varlistentry> … … 247 250 <term>pg_trgm</term> 248 251 <listitem> 249 <para>Similarité textuelle en utilisant la correspondance par 250 trigramme</para> 252 <para>Similarité textuelle par correspondance de trigrammes</para> 251 253 </listitem> 252 254 </varlistentry> … … 267 269 268 270 <para> 269 Habituellement, rejouer les traces WAL suffit àrestaurer l'intégrité d'un271 Il est généralement suffisant de rejouer les traces WAL pour restaurer l'intégrité d'un 270 272 index GiST après un arrêt brutal de la base de données. Néanmoins, il existe 271 273 quelques cas particuliers pour lesquels l'état de l'index n'est pas 272 entièrement reconstruit. L'index sera toujours fonctionnellement correct mais 273 il pourrait y avoir des dégradations dans les performances. Lorsque ceci 274 arrive, l'index peut être réparable par la commande 275 <command>VACUUM</command> sur sa table, ou en reconstruisant l'index avec la commande 276 <command>REINDEX</command>. Dans certains cas, un simple <command>VACUUM</command> n'est pas 277 suffisant et soit un <command>VACUUM FULL</command> soit un <command>REINDEX</command> 278 est nécessaire. Le besoin d'une de ces procédures est indiqué par 279 l'arrivée : 274 entièrement reconstruit. L'index reste fonctionnellement correct mais 275 les performances peuvent se trouver dégradées. Lorsque cela 276 arrive, l'index peut être réparé par <command>VACUUM</command> de sa table, ou 277 par reconstruction avec <command>REINDEX</command>. Dans certains cas, un simple 278 <command>VACUUM</command> ne suffit pas et un <command>VACUUM FULL</command> 279 ou un <command>REINDEX</command> est nécessaire. Ce besoin est indiqué par 280 la survenue d'un tel message : 280 281 <programlisting>LOG: index NNN/NNN/NNN needs VACUUM or REINDEX to finish crash recovery 281 282 </programlisting> 282 ou ce message de traces lors d'insertions d'index :283 ou le message suivant lors d'insertions dans l'index : 283 284 <programlisting>LOG: index "FOO" needs VACUUM or REINDEX to finish crash recovery 284 285 </programlisting> 285 Si un simple <command>VACUUM</command> se trouve lui-mêmeincapable de réaliser286 complètement la récupération, il renverra un avertissement :286 Si un simple <command>VACUUM</command> est incapable de réaliser 287 complètement la récupération, l'avertissement suivant est envoyé : 287 288 <programlisting>NOTICE: index "FOO" needs VACUUM FULL or REINDEX to finish crash recovery 288 289 </programlisting>

