Bonjour à tous,
Récemment, j'ai vu la notion de réplication de bases de données. Apparemment, l'une des façons de faire est d'utiliser des clichés ("materialized views") si l'on veut procéder de manière asynchrone (et des triggers pour du synchrone).
Je me suis donc documenté sur la notion de cliché, et j'aimerais être sûr que j'ai bien compris ce que j'ai lu. Le paragraphe suivant vous semble-t-il correct ? Merci d'avance.
Plaçons-nous dans le contexte d'une base de données distribuée : nous avons deux sites distincts, S1 et S2. Un cliché (<=> "une vue matérialisée") est une copie de toute ou partie d'une table-maître. Nous décidons de faire une table-maître dans S1. Et nous allons désormais travaillons dans S2.
Ainsi, dans S2, nous créons vue matérialisée (<=> "VM") de la table-maître (<=> "TM") de S1. Le grand principe de la notion de "cliché" quand la VM sera modifiée (ajout/modification/suppression d'un tuple), la TM sera mise-à-jour et réciproquement.
Pour créer cette VM, nous avons exécuté cette commande SQL:
1 2 3 4 | CREATE MATERIALIZED VIEW un_nom_de_vue_materielle REFRESH FAST START WITH 29/04/2016 NEXT 1hour AS SELECT * FROM S1.nom_table_maitre |
Ainsi, la VM que nous venons de créer dans S2 est la copie intégrale (SELECT * […]) de la table-maître "nom_table_maitre", située dans S1.
Le REFRESH indique de lancer le premier download de la TM (de S1) vers la VM (de S2) AINSI QUE de lancer le premier upload (de la VM) de S2 vers la TM (de S1). Le tout dès le 29/04/2016 et toutes les heures.
Par ailleurs, le REFRESH possède trois valeurs :
-
Fast : utiliser les logs de la vue matérialisée pour mettre-à-jour seulement les lignes qui ont changé depuis le dernier REFRESH ;
-
Complete : met-à-jour toute la vue matérialisée ;
-
Force (par défaut) : fait un Fast-refresh quand c'est possible sinon un Complete-refresh.
Enfin, c'est le Materialized-View-Log (<=> "MVL"), une table, qui enregistre les modifications de la vue matérialisée (le MVL est utilisé pour le Fast et Force).