| | 421 | PostgreSQL utilise un modèle de verrous robuste appelé MVCC qui limite les situations où les clients interfèrent les uns |
|---|
| | 422 | avec les autres. Un court résumé du principal bénéfice du MVCC serait "les lecteurs ne sont jamais bloqués par les |
|---|
| | 423 | écritures". MVCC est utilisé pour implémenter une vision pessimiste des quatre niveaux d'isolation standards de SQL : |
|---|
| | 424 | « lorsque vous sélectionnez le niveau "Read Uncommited" (Lecture de données non validées) vous avez en réalité |
|---|
| | 425 | "Read Committed" (Lecture de données validées), et quand vous sélectionnez "Repeatable Read" (Lecture répétée) vous |
|---|
| | 426 | aurez en réalité "Serializable" (Sérialisable), donc le niveau d'isolation actuel pourrait être plus strict que ce que |
|---|
| | 427 | vous sélectionnez ». Le niveau d'isolation des transactions par défaut est "read commited". |
|---|
| | 443 | Lorsque l'on compare les deux modèles, PostgreSQL assure une séparation des clients tel que les données traitées soient |
|---|
| | 444 | toujours consistantes dans toutes les circonstances ; comme la documentation MVCC l'établit, « La raison pour laquelle |
|---|
| | 445 | PostgreSQL fournit seulement deux niveaux d'isolation est qu'il s'agit de la seule façon raisonnable de faire |
|---|
| | 446 | correspondre les niveaux d'isolation standards avec l'architecture de contrôle des accès simultanés multiversion ». |
|---|
| | 447 | MySQL autorise des configurations où le code d'un client qui ne valide pas correctement ses transactions peu aboutir à |
|---|
| | 448 | une vue des données qui serait considérée inconsistante par les standards strictes de PostgreSQL. Cependant, dans les |
|---|
| | 449 | situations où il est acceptable d'avoir des lectures avec de petites inconsistances, avoir la possibilité d'utiliser des |
|---|
| | 450 | verrous moins strictes peut être un avantage en terme de performances dans MySQL. |
|---|
| | 463 | Même lorsque les deux systèmes sont configurés avec l'un des niveaux strict des verrous de transaction, les différences |
|---|
| | 464 | entre les deux implémentations sont suffisamment subtiles qu'il soit difficile de définir clairement uelle sera la plus |
|---|
| | 465 | appropriée pour une application particulière. Une lecture recommandée pour comprendre ce sujet compliqué est |
|---|
| | 466 | "Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control" de Weikum & Vossen. En |
|---|
| | 467 | utilisant les termes qui y sont employés, PostgreSQL utilise un tri daté multiversion (multi-version timestamp ordering) |
|---|
| | 468 | (MVTO) tandis que InnoDB et Oracle utilisent la consistance des lectures multiversions (multi-version read consistency) |
|---|
| | 469 | (MVRC). La principale différence est que PostgreSQL est avec-REFAIT/sans-ANNULE (with-REDO/no-UNDO) car il stock chaque |
|---|
| | 470 | version des lignes dans la table principale, alors que Oracle/InnoDB implémente avec-REFAIT/avec-ANNULE |
|---|
| | 471 | (with-REDO/with-UNDO) où ils reconstruisent un bloc et/ou l'image d'une ligne depuis les journaux afin de proposer une |
|---|
| | 472 | lecture consistante. Si vous êtes prêt à aborder une troisième architecture, celle de DB2 d'IBM, d'autres bonnes références sur le propos pour comparaisons sont "A not-so-very technical discussion of Multi Version Concurrency Control" et |
|---|
| | 473 | "Leverage your PostgreSQL V8.1 skills to learn DB2". IBM n'est clairement pas fan de l'approche MVCC. |
|---|