Changeset 1155
- Timestamp:
- 09/26/08 11:12:31 (2 months ago)
- Files:
-
- traduc/trunk/postgresql/high-availability.xml (modified) (11 diffs)
- traduc/trunk/postgresql/history.xml (modified) (3 diffs)
- traduc/trunk/postgresql/hstore.xml (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
traduc/trunk/postgresql/high-availability.xml
r1154 r1155 228 228 </varlistentry> 229 229 230 <!-- SAS::ICI --> 231 <varlistentry> 232 <term>Réplication asynchrone à plusieurs maîtres</term> 230 <varlistentry> 231 <term>Réplication asynchrone multi-maîtres</term> 233 232 <listitem> 234 233 235 234 <para> 236 235 Pour les serveurs qui ne sont pas connectés en permanence, comme les 237 portables ou les serveurs distants, garder la cohérence des données238 entre les serveurs est un challenge. En utilisantla réplication asynchrone239 à plusieurs maîtres, chaque serveur fonctionne indépendamment et communique240 périodiquement avec les autres serveurs pour identifier les transactions241 en conflit. Les conflits peuvent être résolus par les utilisateurs ou par242 desrègles de résolution.236 ordinateurs portables ou les serveurs distants, conserver la cohérence des données 237 entre les serveurs est un challenge. L'utilisation de la réplication asynchrone 238 multi-maîtres permet à chaque serveur de fonctionner indépendamment. Il 239 communique alors périodiquement avec les autres serveurs pour identifier les transactions 240 conflictuelles. La gestion des conflits est alors confiée aux utilisateurs 241 ou à un système de règles de résolution. 243 242 </para> 244 243 </listitem> … … 249 248 <listitem> 250 249 251 <!-- Je corrige l'erreur relevée par tigrou3tac, mais le passage est à 252 reprendre. Les phrases sont un peu lourdes --> 253 <para> 254 Dans les réplications synchrones multi-maîtres, chaque serveur peut 255 accepter les requêtes en écriture. Les données modifiées sont transmises 256 du serveur original à tous les autres serveurs avant validation de chaque 257 transaction. Une activité importante en écriture peut être la cause d'un 258 verrouillage excessif conduisant à un effondrement des performances. En fait, la 259 performance en écriture est souvent pis que celle d'un simple serveur. Les 260 requêtes en lecture peuvent être envoyées à tous les serveurs. Certaines 261 implantations utilisent les disques partagés pour réduire la surcharge 262 de communication. La réplication synchrone multi-maîtres est bien meilleure 263 principalement pour de grosses charges de travail en lecture bien que son gros 264 avantage est que tout serveur peut accepter des requêtes d'écriture — 265 il n'est pas nécessaire de partitionner les travaux entre les serveurs 266 maîtres et esclaves et, comme les modifications de données sont envoyées 267 d'un serveur à un autre, il n'y a pas de problème avec les fonctions 268 non déterministiques comme <function>random()</function>. 250 <para> 251 Dans les réplications synchrones multi-maîtres, tous les serveurs acceptent 252 les requêtes en écriture. Les données modifiées sont transmises 253 du serveur d'origine à tous les autres serveurs avant toute validation de 254 transaction. 255 </para> 256 <para> 257 Une activité importante en écriture peut être la cause d'un 258 verrouillage excessif et conduire à un effondrement des performances. Dans 259 les faits, les performances en écriture sont souvent pis que celles d'un 260 simple serveur. 261 </para> 262 <para> 263 Tous les serveurs acceptent les requêtes en lecture. 264 </para> 265 <para> 266 Certaines implantations utilisent les disques partagés pour réduire la surcharge 267 de communication. 268 </para> 269 <para> 270 Les performances de la réplication synchrone multi-maîtres sont meilleures lorsque 271 les opérations de lecture représentent l'essentiel de la charge, alors que 272 son gros avantage est l'acceptation des requêtes d'écriture par tous les 273 serveurs — 274 il n'est pas nécessaire de répartir la charge entre les serveurs 275 maîtres et esclaves et, parce que les modifications de données sont envoyées 276 d'un serveur à l'autre, les fonctions non déterministiques, comme 277 <function>random()</function>, ne posent aucun problème. 269 278 </para> 270 279 271 280 <para> 272 281 <productname>PostgreSQL</productname> n'offre pas ce type de réplication, 273 bien quela validation en deux phases de <productname>PostgreSQL</productname>282 mais la validation en deux phases de <productname>PostgreSQL</productname> 274 283 (<xref linkend="sql-prepare-transaction" 275 284 endterm="sql-prepare-transaction-title"/> et <xref 276 linkend="sql-commit-prepared" endterm="sql-commit-prepared-title"/>) peut277 être utilisée pour implémenter celadans une application ou un285 linkend="sql-commit-prepared" endterm="sql-commit-prepared-title"/>) 286 autorise son intégration dans une application ou un 278 287 <foreignphrase>middleware</foreignphrase>. 279 288 </para> … … 286 295 287 296 <para> 288 Comme <productname>PostgreSQL</productname> est libre et facilement 289 extensible, certaines sociétés ont pris <productname>PostgreSQL</productname> 290 et créé des solutions propriétaires avec leur propres fonctionnalités de 291 <foreignphrase>failover</foreignphrase>, réplication et répartition de 292 charges. 297 Parce que <productname>PostgreSQL</productname> est libre et facilement 298 extensible, certaines sociétés utilisent <productname>PostgreSQL</productname> 299 dans des solutions commerciales fermées 300 (<foreignphrase>closed-source</foreignphrase>) proposant des fonctionnalités de 301 bascule sur incident (<foreignphrase>failover</foreignphrase>), 302 réplication et répartition de charge. 293 303 </para> 294 304 </listitem> … … 299 309 <para> 300 310 La <xref linkend="high-availability-matrix"/> résume les 301 capacités des différentes solutions listées ci-dessus.311 possibilités des différentes solutions listées plus-haut. 302 312 </para> 303 313 … … 309 319 <row> 310 320 <entry>Fonctionnalité</entry> 311 <entry><foreignphrase>Shared Disk Failover</foreignphrase></entry> 312 <entry>Réplication système de fichiers</entry> 313 <entry><foreignphrase>Warm Standby</foreignphrase> (en utilisant 314 <acronym>PITR</acronym>)</entry> 321 <entry>Bascule par disques partagés (<foreignphrase>Shared Disk 322 Failover</foreignphrase>)</entry> 323 <entry>Réplication par système de fichiers</entry> 324 <entry>Secours semi-automatique (<foreignphrase>Warm 325 Standby</foreignphrase>) par <acronym>PITR</acronym></entry> 315 326 <entry>Réplication maître/esclave</entry> 316 327 <entry><foreignphrase>Middleware</foreignphrase> de réplication 317 s e basant sur lesinstructions</entry>318 <entry>Réplication asynchrone multi-maître </entry>319 <entry>Réplication synchrone multi-maître </entry>328 sur instructions</entry> 329 <entry>Réplication asynchrone multi-maîtres</entry> 330 <entry>Réplication synchrone multi-maîtres</entry> 320 331 </row> 321 332 </thead> … … 324 335 325 336 <row> 326 <entry> Aucun matériel spécial requis</entry>337 <entry>Ne requiert aucun matériel spécial</entry> 327 338 <entry align="center"></entry> 328 339 <entry align="center">•</entry> … … 346 357 347 358 <row> 348 <entry> Aucune surcharge dû auserveur maître</entry>349 <entry align="center">•</entry> 350 <entry align="center"></entry> 351 <entry align="center">•</entry> 352 <entry align="center"></entry> 353 <entry align="center">•</entry> 354 <entry align="center"></entry> 355 <entry align="center"></entry> 356 </row> 357 358 <row> 359 <entry> Aucune attente des différentsserveurs</entry>360 <entry align="center">•</entry> 361 <entry align="center"></entry> 362 <entry align="center">•</entry> 363 <entry align="center">•</entry> 364 <entry align="center"></entry> 365 <entry align="center">•</entry> 366 <entry align="center"></entry> 367 </row> 368 369 <row> 370 <entry> Un échec du maître ne perdra aucune donnée</entry>359 <entry>Pas de surcharge sur le serveur maître</entry> 360 <entry align="center">•</entry> 361 <entry align="center"></entry> 362 <entry align="center">•</entry> 363 <entry align="center"></entry> 364 <entry align="center">•</entry> 365 <entry align="center"></entry> 366 <entry align="center"></entry> 367 </row> 368 369 <row> 370 <entry>Pas d'attente entre serveurs</entry> 371 <entry align="center">•</entry> 372 <entry align="center"></entry> 373 <entry align="center">•</entry> 374 <entry align="center">•</entry> 375 <entry align="center"></entry> 376 <entry align="center">•</entry> 377 <entry align="center"></entry> 378 </row> 379 380 <row> 381 <entry>Pas de perte de données en cas de panne du maître</entry> 371 382 <entry align="center">•</entry> 372 383 <entry align="center">•</entry> … … 390 401 391 402 <row> 392 <entry>Granularité partable</entry>393 <entry align="center"></entry> 394 <entry align="center"></entry> 395 <entry align="center"></entry> 396 <entry align="center">•</entry> 397 <entry align="center"></entry> 398 <entry align="center">•</entry> 399 <entry align="center">•</entry> 400 </row> 401 402 <row> 403 <entry> Aucune résolution de conflit nécessaire</entry>403 <entry>Granularité de niveau table</entry> 404 <entry align="center"></entry> 405 <entry align="center"></entry> 406 <entry align="center"></entry> 407 <entry align="center">•</entry> 408 <entry align="center"></entry> 409 <entry align="center">•</entry> 410 <entry align="center">•</entry> 411 </row> 412 413 <row> 414 <entry>Ne nécessite pas de résolution de conflit</entry> 404 415 <entry align="center">•</entry> 405 416 <entry align="center">•</entry> … … 416 427 <entry align="center">Blocs disque</entry> 417 428 <entry align="center">WAL</entry> 418 <entry align="center">Lignes de stables</entry>429 <entry align="center">Lignes de tables</entry> 419 430 <entry align="center">SQL</entry> 420 <entry align="center">Lignes de stables</entry>421 <entry align="center">Lignes de stables et verrous de ligne</entry>431 <entry align="center">Lignes de tables</entry> 432 <entry align="center">Lignes de tables et verrous de ligne</entry> 422 433 </row> 423 434 … … 437 448 438 449 <para> 439 Le partitionnement des données divise les tables en ensemble de données.440 Chaque ensemble peut être modifié par un seul serveur. Par exemple, les441 données peuvent être partitionnées par bureaux, par exempleLondres et442 Paris avec un serveur dans chaque bureau. Si les requêtes combinant les443 données de Londres et de Paris sont nécessaures, une application peut444 envoyer des requêtes sur les deux serveurs ou la réplication maître/esclave445 peut être utilisée pour conserver sur chaque serveur une copie en lecture450 Le partitionnement des données divise les tables en ensembles de données. 451 Chaque ensemble ne peut être modifié que par un seul serveur. Les 452 données peuvent ainsi être partitionnées par bureau, Londres et 453 Paris, par exemple, avec un serveur dans chaque bureau. Si certaines 454 requêtes doivent combiner des données de Londres et Paris, il est possible 455 d'utiliser une application qui requête les deux serveurs ou d'implanter une 456 réplication maître/esclave pour conserver sur chaque serveur une copie en lecture 446 457 seule des données de l'autre bureau. 447 458 </para> … … 454 465 455 466 <para> 456 Un grand nombredes solutions ci-dessus permettent à plusieurs serveurs de457 répondre à plusieurs requêtesmais aucune ne permet à une seule requête467 La plupart des solutions ci-dessus permettent à plusieurs serveurs de 468 répondre à des requêtes multiples, mais aucune ne permet à une seule requête 458 469 d'être exécutée sur plusieurs serveurs pour se terminer plus rapidement. 459 Cette solution autorise le travail en commun de plusieurs serveurssur une460 seule requête. Ceci s'accomplit habituellement en divisant les données461 entre les serveurs et en ayant chaque serveur qui exécuteune partie de la462 requête pour renvoyer les résultats à un serveur central qui les combine ra463 et les renv erraà l'utilisateur. <productname>Pgpool-II</productname>464 a cette capacité. De plus, cela peut être implémenté en utilisant les465 outils de<productname>PL/Proxy</productname>.470 Cette solution autorisent plusieurs serveurs à travailler ensemble sur une 471 seule requête. Ceci s'accomplit habituellement en répartissant les données 472 entre les serveurs, chaque serveur exécutant une partie de la 473 requête pour renvoyer les résultats à un serveur central qui les combine 474 et les renvoie à l'utilisateur. <productname>Pgpool-II</productname> 475 offre cette possibilité. Cela peut également être implanté en utilisant les 476 outils <productname>PL/Proxy</productname>. 466 477 </para> 467 478 </listitem> traduc/trunk/postgresql/history.xml
r973 r1155 18 18 <productname>POSTGRES</productname>, programme écrit à l'université de 19 19 Californie à Berkeley. Après plus d'une dizaine d'années de développement, 20 <productname>PostgreSQL</productname> estla base de données OpenSource de20 <productname>PostgreSQL</productname> annonce être devenu la base de données OpenSource de 21 21 référence. 22 22 </para> … … 59 59 60 60 <para> 61 <productname>POSTGRES</productname> f ut utilisé dans plusieurs61 <productname>POSTGRES</productname> fût utilisé dans plusieurs 62 62 applications, en recherche et en production. On peut citer, par exemple : 63 63 un système … … 194 194 <para> 195 195 Beaucoup de personnes font référence à 196 <productname>PostgreSQL</productname> avec<quote>Postgres</quote>197 ( rarement avec toutes les lettres en majuscules) à cause de la198 tradition ou parce que c'est simple à prononcer. Cet usage est accepté196 <productname>PostgreSQL</productname> par <quote>Postgres</quote> 197 (il est rare que le nom soit écrit en capitales) par 198 tradition ou parce que c'est plus simple à prononcer. Cet usage est accepté 199 199 comme alias ou pseudo. 200 200 </para> traduc/trunk/postgresql/hstore.xml
r973 r1155 13 13 14 14 <para> 15 Ce module implémente le type de données<type>hstore</type> pour stocker des15 Ce module code le type de données<type>hstore</type> pour stocker des 16 16 ensembles de paires (clé, valeur) à l'intérieur d'un simple champ 17 <productname>PostgreSQL</productname>. Ce ci est utile dans plusieurs cas18 c omme des lignes contenant plusieurs attributs rarement examinés ou des19 données à moitié structuré.17 <productname>PostgreSQL</productname>. Cela peut s'avérer utile dans divers 18 cas, comme les lignes à attributs multiples rarement examinées ou les données 19 semi-structurées. 20 20 </para> 21 21 … … 35 35 </programlisting> 36 36 37 L'ordre des éléments n'est pas considéré significatif (et pourrait ne pas38 être reproduit en sortie). Les espaces blancsentre les éléments ou autour39 du signe <literal>=></literal> sont ignoré s. Utilisez des guillemets40 doubles s i une clé ou une valeur inclut des espaces blancs, virgule,37 L'ordre des éléments n'est pas significatif (et peut ne pas 38 être reproduit en sortie). Les espaces entre les éléments ou autour 39 du signe <literal>=></literal> sont ignorées. Des guillemets 40 doubles sont nécessaires si une clé ou une valeur inclut espace, virgule, 41 41 <literal>=</literal> ou <literal>></literal>. Pour inclure un 42 guillemet double ou un antislash dans une clé ou une valeur, faites-le43 précéder d'un autre antislash. (Gardez en tête que, suivantla configuration44 de <varname>standard_conforming_strings</varname>, vous pourriez avoir45 besoin de doubler les antislashs dans les chaînes litérales enSQL.)46 </para> 47 48 <para> 49 Une valeur (mais pas une clé) peut valoirNULL. Ceci est représenté42 guillemet double ou un antislash dans une clé ou une valeur, on le précède 43 d'un autre antislash. (En fonction de la configuration 44 de <varname>standard_conforming_strings</varname>, il peut s'avérer 45 nécessaire de doubler les antislashs dans les chaînes litérales SQL.) 46 </para> 47 48 <para> 49 Une valeur (mais pas une clé) peut être NULL. Ceci est représenté 50 50 ainsi : 51 51 … … 54 54 </programlisting> 55 55 56 Le mot clé <literal>NULL</literal> n'est pas sensible à la casse. De57 nouveau, utilisez les guillemets doubles si vous voulezque la chaîne56 Le mot clé <literal>NULL</literal> est insensible à la casse. Là aussi, on 57 utilise les guillemets doubles pour que la chaîne 58 58 <literal>null</literal> soit traitée comme une valeur ordinaire. 59 59 </para> 60 60 61 61 <para> 62 Actuellement, les guillemets doubles sont utilisé es pour entourer les62 Actuellement, les guillemets doubles sont utilisés pour entourer les 63 63 chaînes représentant la clé et la valeur en sortie, même si ce n'est pas 64 64 strictement nécessaire. … … 86 86 <row> 87 87 <entry><type>hstore</type> <literal>-></literal> <type>text</type></entry> 88 <entry>obt ient la valeur pour cetteclé (NULL si inexistante)</entry>88 <entry>obtenir la valeur de la clé (NULL si inexistante)</entry> 89 89 <entry><literal>'a=>x, b=>y'::hstore -> 'a'</literal></entry> 90 90 <entry><literal>x</literal></entry> … … 93 93 <row> 94 94 <entry><type>text</type> <literal>=></literal> <type>text</type></entry> 95 <entry>crée un <type>hstore</type> à un seul élément</entry>95 <entry>créer un <type>hstore</type> à un seul élément</entry> 96 96 <entry><literal>'a' => 'b'</literal></entry> 97 97 <entry><literal>"a"=>"b"</literal></entry> … … 107 107 <row> 108 108 <entry><type>hstore</type> <literal>?</literal> <type>text</type></entry> 109 <entry><type>hstore</type> contient-il la clé ?</entry>109 <entry><type>hstore</type> contient-il une clé donnée ?</entry> 110 110 <entry><literal>'a=>1'::hstore ? 'a'</literal></entry> 111 111 <entry><literal>t</literal></entry> … … 134 134 Avant PostgreSQL 8.2, les opérateurs de contenance @> et <@ étaient 135 135 appelés respectivement @ et ~. Ces noms sont toujours disponibles mais sont 136 devenus obsolètes et pourraient éventuellement être supprimés. Notez que137 les anciens noms sont inversés par rapport à la convention suivie par les136 devenus obsolètes et pourraient éventuellement être supprimés. 137 Les anciens noms sont inversés par rapport à la convention suivie par les 138 138 types de données géométriques. 139 139 </para> … … 157 157 <entry><function>akeys(hstore)</function></entry> 158 158 <entry><type>text[]</type></entry> 159 <entry>récup èreles clés du <type>hstore</type> dans un tableau</entry>159 <entry>récupérer les clés du <type>hstore</type> dans un tableau</entry> 160 160 <entry><literal>akeys('a=>1,b=>2')</literal></entry> 161 161 <entry><literal>{a,b}</literal></entry> … … 165 165 <entry><function>skeys(hstore)</function></entry> 166 166 <entry><type>setof text</type></entry> 167 <entry>récup èreles clés du <type>hstore</type> dans un ensemble</entry>167 <entry>récupérer les clés du <type>hstore</type> dans un ensemble</entry> 168 168 <entry><literal>skeys('a=>1,b=>2')</literal></entry> 169 169 <entry> … … 177 177 <entry><function>avals(hstore)</function></entry> 178 178 <entry><type>text[]</type></entry> 179 <entry>récup èreles valeurs du <type>hstore</type> dans un tableau</entry>179 <entry>récupérer les valeurs du <type>hstore</type> dans un tableau</entry> 180 180 <entry><literal>avals('a=>1,b=>2')</literal></entry> 181 181 <entry><literal>{1,2}</literal></entry> … … 185 185 <entry><function>svals(hstore)</function></entry> 186 186 <entry><type>setof text</type></entry> 187 <entry>récup èreles valeurs du <type>hstore</type> dans un187 <entry>récupérer les valeurs du <type>hstore</type> dans un 188 188 ensemble</entry> 189 189 <entry><literal>svals('a=>1,b=>2')</literal></entry> … … 198 198 <entry><function>each(hstore)</function></entry> 199 199 <entry><type>setof (key text, value text)</type></entry> 200 <entry>récup èreles clés et valeurs du <type>hstore</type> dans un200 <entry>récupérer les clés et valeurs du <type>hstore</type> dans un 201 201 ensemble</entry> 202 202 <entry><literal>select * from each('a=>1,b=>2')</literal></entry> … … 213 213 <entry><function>exist(hstore,text)</function></entry> 214 214 <entry><type>boolean</type></entry> 215 <entry>le <type>hstore</type> contient-il la clé ?</entry>215 <entry>le <type>hstore</type> contient-il une clé donnée ?</entry> 216 216 <entry><literal>exist('a=>1','a')</literal></entry> 217 217 <entry><literal>t</literal></entry> … … 230 230 <entry><function>delete(hstore,text)</function></entry> 231 231 <entry><type>hstore</type></entry> 232 <entry>supprime tout élément correspondant à la clé</entry>232 <entry>supprimer tout élément correspondant à une clé donnée</entry> 233 233 <entry><literal>delete('a=>1,b=>2','b')</literal></entry> 234 234 <entry><literal>"a"=>"1"</literal></entry> … … 244 244 245 245 <para> 246 <type>hstore</type> comprend un supportdes index pour les opérateurs247 <literal>@></literal> et <literal>?</literal>. Vous pouvez utiliser les248 types d'index GiST ou GIN. Par exemple :246 <type>hstore</type> supporte des index pour les opérateurs 247 <literal>@></literal> et <literal>?</literal>. Les 248 types d'index GiST et GIN peuvent être utilisés. Par exemple : 249 249 </para> 250 250 <programlisting> … … 278 278 279 279 <para> 280 Le type <type>hstore</type>, à cause de sa libéralité intrinsèque, pourrait281 contenir beaucoup de clés différentes. Vérifier les clés valides est le282 travail de l'application. Les exemples ci-dessous démontrent plusieurs280 Le type <type>hstore</type>, du fait de sa libéralité intrinsèque, peut 281 contenir beaucoup de clés différentes. C'est à l'application de vérifier 282 la validité des clés. Les exemples ci-dessous présentent plusieurs 283 283 techniques pour vérifier les clés et obtenir des statistiques. 284 284 </para>

