root/traduc/trunk/slony/partitioning.xml

Revision 1173, 5.6 kB (checked in by gleu, 3 weeks ago)

Modifications pour permettre la génération du manuel.
Patch de Christophe Bouchet, avec quelques modifications supplémentaires de ma
part.
Cependant, il reste encore du travail pour avoir une génération parfaite.

Line 
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- DerniÚre modification
3      le       $Date$
4      par      $Author$
5      révision $Revision$ -->
6
7 <sect1 id="partitioning">
8 <title>Support du partitionnement </title>
9 <indexterm><primary>partitionnement</primary></indexterm>
10
11 <para> &slony1; ne supporte pas directement la méthode de partitionnement
12   par héritage de &postgres;, cependant il n'empêche pas non plus les
13   utilisateur de répliquer de tels héritages et ainsi que les tables
14   qui y sont associées.</para>
15
16 <para> Un des tests du <xref linkend="testbed"/>, appelé
17 <filename>testinherit</filename>, vérifie que &slony1; se comporte
18 comme prévu lors de la réplication de données partitionnées. Ce test
19 crée une table maître <envar>sales_data</envar> dont plusieurs tables filles héritent : </para>
20
21 <itemizedlist>
22 <listitem><para> <envar>us_east</envar></para> </listitem>
23 <listitem><para> <envar>us_west</envar></para> </listitem>
24 <listitem><para> <envar>canada</envar></para> </listitem>
25 </itemizedlist>
26
27 <para> Cet exemple est un peu simpliste car il fournit uniquement des rÚgles
28   d'insertion dans les différentes partitions; il ne permet pas de migrer des
29   tuples d'une partition à une autre si ils sont modifiés via une commande
30   <command>UPDATE</command> statement.  D'un autre coté, à la différence de
31   de beaucoup de partitionnement, celui-ci permet à la table <quote>parente</quote>
32   de contenir des tuples. </para>
33
34 <para> On peut remarquer quelques points intéressants :</para>
35
36 <itemizedlist>
37 <listitem><para> Chaque table de partition doit être ajoutée à la réplication individuellement. </para> </listitem>
38 <listitem><para> &slony1; n'est pas conscient des relations entre les tables de partition; il les considÚre comme
39     une série de tables indépendantes. </para> </listitem>
40 </itemizedlist>
41
42
43 <sect2><title> Support de l'ajout dynamique de partition</title>
44
45 <para> Un <quote>cas d'utilisation</quote> fréquent de la réplication consiste
46   à partitionner de large ensemble de données selon un critÚre temporel : la semaine,
47   le moins, le trimestre ou l'année, ce qui implique par conséquent l'ajout périodique
48   d'une nouvelle partition. </para>
49
50 <para> L'approche traditionnelle pour effectuer cela avec &slony1; est la suivante : </para>
51
52 <itemizedlist>
53 <listitem><para> <xref linkend="stmtddlscript"/> pour ajouter la nouvelle table de partition sur chaque noeud</para> </listitem>
54 <listitem><para> <xref linkend="stmtcreateset"/> pour créer un ensemble de réplication temporaire </para> </listitem>
55 <listitem><para> <xref linkend="stmtsetaddtable"/> pour ajouter la table dans cet ensemble </para> </listitem>
56 <listitem><para> <xref linkend="stmtsubscribeset"/>, une fois pour chaque noeud abonné, afin de mettre en place
57     la réplication sur chaque noeud </para> </listitem>
58 <listitem><para> <xref linkend="stmtmergeset"/>, une fois que la réplication fonctionne, afin de supprimer
59     l'ensemble de réplication temporaire </para> </listitem>
60 </itemizedlist>
61
62 <para> Sachant qu'il y a de fortes chances pour que la nouvelle partition soit vide,
63   il existe un mécanisme alternatif qui évite de créer un ensemble de réplication
64   supplémentaire et l'utilisation de multiples requêtes <xref linkend="stmtsubscribeset"/>
65   Cette alternative est la suivante : on utilise le script  <xref
66 linkend="stmtddlscript"/>, pour effectuer le script DDL suivant : </para>
67
68 <itemizedlist>
69 <listitem><para> Ajouter la nouvelle partition sur chaque noeud </para> </listitem>
70 <listitem><para> Exécuter les fonction stockées pour inscrire la nouvelle partition dans l'ensemble de réplication.</para>
71
72 <para> Sur le noeud d'origine, si la table de partitionnement contient des tuples,
73  le script DDL s'arrêtera car le fait que la table soit vide est une condition qui ne
74  peut pas être violée. </para>
75
76 <para> Sur les noeuds abonnés, on peut effectuer sans danger un <command>TRUNCATE</command> sur la nouvelle table. </para>
77 </listitem>
78 </itemizedlist>
79
80 <para> Il existe plusieurs fonctions qui prennent en charge cela :
81   L'utilisateur peut utiliser celle qu'il préfÚre. La <quote> fonction de
82 base </quote> est <function>add_empty_table_to_replication()</function>; les
83 autres disposent d'arguments supplémentaires ou différents</para>
84
85 <itemizedlist>
86 <listitem><para> <function> add_empty_table_to_replication (set_id, tab_id, nspname, tabname, idxname, comment);</function> </para>
87
88 <para> Ceci est la fonction de <quote>base</quote>; vous devez spécifier
89   l'identifiant de l'ensemble (set_id), l'identifiant de la table (tab_id),
90   l'espace de nom (nspname), le nom de la table(tabname), le nom de l'index (idxname)
91   et un commentaire (comment) . La table sera alors ajouté dans la réplication. </para>
92
93 <para> Notez que le nom d'index est optionnel; si la valeur est NULL, alors
94   la fonction utilisera la clé primaire de la table, en supposant qu'il en existe une.
95   La fonction échouera s'il n'existe pas de clé primaire. </para>
96
97 </listitem>
98
99 <listitem><para> <function> replicate_partition(tab_id, nspname, tabname, idxname, comment); </function> </para>
100
101 <para> Si l'on sait que la table qui doit être répliquée hérite d'une table mÚre
102   répliquée elle-aussi, alors cette fonction peut récupérer les informations sur
103   l'ensemble de réplication et l'origine à partir de la table mÚre.
104 </para>
105 </listitem>
106 </itemizedlist>
107
108
109 <note><para> Comme il a été remarqué précédemment, &slony1; n'est pas conscient
110     que les tables sont partitionnées. Ainsi, cette approche peut être utilisée
111     pour ajouter une table vide dans la réplication. </para> </note>
112 </sect2>
113
114 </sect1>
Note: See TracBrowser for help on using the browser.