Changeset 943

Show
Ignore:
Timestamp:
03/14/08 09:39:36 (10 months ago)
Author:
sas
Message:

Relu
close #269

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • traduc/trunk/postgresql/gist.xml

    r942 r943  
    5252 <title>Extensibilité</title> 
    5353 
    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 
    6971   exemple, <productname>PostgreSQL</productname> supporte les B-trees et les 
    70    index hash. Ceci signifie que vous pouvez utiliser 
     72   index hash extensibles. Cela signifie qu'il est possible d'utiliser 
    7173   <productname>PostgreSQL</productname> pour construire un B-tree ou un hachage 
    72    sur tout type de données que vous souhaitez. Mais, les B-trees supportent 
    73    seulement les prédicats sur une séquence (<literal>&lt;</literal>, 
    74    <literal>=</literal>, <literal>&gt;</literal>) et les index hash supportent 
    75    seulement les requêtes d'égalité. 
    76  </para> 
    77   
    78  <para> 
    79    Donc, si vous indexez, disons, une collection d'images avec un B-tree 
    80    <productname>PostgreSQL</productname>, vous pouvez seulement lancer des  
    81    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>&lt;</literal>, 
     76   <literal>=</literal>, <literal>&gt;</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>, 
    8284   <quote>est-ce que imagex est plus petite que imagey</quote> et <quote>est-ce 
    83    que imagex est plus grande que imagey</quote>&nbsp;? Suivant votre façon de 
    84    définir le <quote>égal à</quote>, le <quote>inférieur à</quote> ou le 
    85    <quote>supérieur à</quote> dans ce contexte, cela peut être utile. 
    86    Néanmoins, en utilisant un index basé sur <acronym>GiST</acronym>, vous 
    87    pouvez créer des moyens de poser des questions spécifiques au domaine, 
    88    peut-être <quote>trouver toutes les images de chevaux</quote> ou 
     85   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 
    8991   <quote>trouver toutes les images sur-exposées</quote>. 
    9092 </para> 
    9193 
    9294 <para> 
    93    Tout ce qui est nécessaire pour obtenir une méthode d'accès 
    94    <acronym>GiST</acronym> fonctionnelle est d'implémenter sept méthodes 
    95    définies par l'utilisateur, qui définissent le comportement des clés dans 
    96    l'arbre. Bien sûr, ces méthodes doivent être particulièrement élaborées 
    97    pour supporter des requêtes avancées mais pour toutes les requêtes standards 
     95   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 
    98100   (B-trees, R-trees, etc.) elles sont relativement simples. En bref, 
    99    <acronym>GiST</acronym> combine l'extensibilité avec la généralité, la 
    100    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. 
    101103  </para> 
    102104 
     
    104106 
    105107<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 pour 
    110    <acronym>GiST</acronym>&nbsp;: 
     108 <title>Implantation</title> 
     109  
     110 <para> 
     111   Une classe d'opérateur d'index <acronym>GiST</acronym> doit fournir sept 
     112   méthodes&nbsp;: 
    111113 </para> 
    112114 
     
    116118     <listitem> 
    117119      <para> 
    118        Suivant un prédicat <literal>p</literal> sur une page de l'arbre et une 
    119        requête utilisateur, <literal>q</literal>, cette méthode doit renvoyer 
    120        false s'il est certain qu'à la fois <literal>p</literal> et 
    121        <literal>q</literal> ne peuvent pas être vrais pour un élément de 
    122        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
    123125      </para> 
    124126     </listitem> 
     
    129131     <listitem> 
    130132      <para> 
    131        Cette méthode consolide les informations de l'arbre. Suivant une liste 
    132        d'entrées, cette fonction génère un nouveau prédicat qui est vrai pour 
     133       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 
    133135       toutes les entrées. 
    134136      </para> 
     
    140142     <listitem> 
    141143      <para> 
    142        Convertit l'élément de données en un format convenable pour l'emplacement 
    143        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. 
    144146      </para> 
    145147     </listitem> 
     
    151153      <para> 
    152154       L'inverse de la fonction <function>compress</function>. Convertit la 
    153        représentation de l'élément donné en un format manipulable par la base 
     155       représentation de l'élément de donnée en un format manipulable par la base 
    154156       de données. 
    155157      </para> 
     
    161163     <listitem> 
    162164      <para> 
    163        Renvoie une valeur indiquant le <quote>coût</quote> d'une insertion 
     165       Renvoie une valeur indiquant le <quote>coût</quote> d'insertion 
    164166       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 
    166168       (<function>penalty</function>) de l'arbre. 
    167169      </para> 
     
    173175     <listitem> 
    174176      <para> 
    175        Quand une séparation de page est nécessaire, cette fonction décide des 
    176        entrées qui resteront sur l'ancienne page et de celles qui seront 
     177       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 
    177179       déplacées sur la nouvelle. 
    178180      </para> 
     
    184186     <listitem> 
    185187      <para> 
    186        Renvoie true si deux entrées sont identiques, false autrement. 
     188       Renvoie vrai si deux entrées sont identiques, faux autrement. 
    187189      </para> 
    188190     </listitem> 
     
    198200 <para> 
    199201  La distribution source de <productname>PostgreSQL</productname> inclut 
    200   plusieurs exemples de méthodes d'indexage implémentées en utilisant 
     202  plusieurs exemples de méthodes d'indexation implantées selon 
    201203  <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 
    204207  (voir <filename>src/backend/access/gist/gistproc.c</filename>). Les modules 
    205208  <filename>contrib</filename> suivants contiennent aussi des classes d'opérateur 
     
    219222   <term>cube</term> 
    220223   <listitem> 
    221     <para>Indexage de cube multi-dimensionnel</para> 
     224    <para>Indexation de cubes multi-dimensionnels</para> 
    222225   </listitem> 
    223226  </varlistentry> 
     
    233236   <term>intarray</term> 
    234237   <listitem> 
    235     <para>RD-Tree pour un tableau à une dimension de valeurs int4</para> 
     238    <para>RD-Tree pour tableaux uni-dimensionnels de valeurs int4</para> 
    236239   </listitem> 
    237240  </varlistentry> 
     
    240243   <term>ltree</term> 
    241244   <listitem> 
    242     <para>Indexage des structures de type arbre</para> 
     245    <para>Indexation des structures de type arbre</para> 
    243246   </listitem> 
    244247  </varlistentry> 
     
    247250   <term>pg_trgm</term> 
    248251   <listitem> 
    249     <para>Similarité textuelle en utilisant la correspondance par 
    250     trigramme</para> 
     252    <para>Similarité textuelle par correspondance de trigrammes</para> 
    251253   </listitem> 
    252254  </varlistentry> 
     
    267269 
    268270 <para> 
    269   Habituellement, rejouer les traces WAL suffit à restaurer l'intégrité d'un 
     271  Il est généralement suffisant de rejouer les traces WAL pour restaurer l'intégrité d'un 
    270272  index GiST après un arrêt brutal de la base de données. Néanmoins, il existe 
    271273  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&nbsp;: 
     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&nbsp;: 
    280281<programlisting>LOG:  index NNN/NNN/NNN needs VACUUM or REINDEX to finish crash recovery 
    281282</programlisting> 
    282   ou ce message de traces lors d'insertions d'index&nbsp;: 
     283  ou le message suivant lors d'insertions dans l'index&nbsp;: 
    283284<programlisting>LOG:  index "FOO" needs VACUUM or REINDEX to finish crash recovery 
    284285</programlisting> 
    285   Si un simple <command>VACUUM</command> se trouve lui-même incapable de réaliser 
    286   complètement la récupération, il renverra un avertissement&nbsp;: 
     286  Si un simple <command>VACUUM</command> est incapable de réaliser 
     287  complètement la récupération, l'avertissement suivant est envoyé&nbsp;: 
    287288<programlisting>NOTICE:  index "FOO" needs VACUUM FULL or REINDEX to finish crash recovery 
    288289</programlisting>