Les différents moteurs de stockage de MySQL

Image non disponible


précédentsommairesuivant

VI. Le moteur Merge

VI-A. Description

Une table MERGE est un ensemble de tables MyISAM possédant la même structure ainsi que le même jeu de caractères.

Il est comparable à l'opérateur ensembliste UNION, mais inclus dans le moteur lui-même et non pas dans une requête, ce qui garantit une meilleure optimisation. L'intérêt réside surtout dans le fait qu'une table MyISAM très volumineuse peut être coupée en plusieurs tables ou tables annexes.

L'efficacité est renforcée sur des tables dont les données sont compressées et en lecture seule.

L'intérêt peut être d'ordre stratégique. Imaginons qu'il existe une table par région. Des utilisateurs peuvent avoir les droits sur une table mais pas sur d'autres. Par contre, le DBA peut gérer toutes les tables des régions en une seule et ceci de manière complètement transparente pour les autres utilisateurs.

VI-B. Exemple d'utilisation

Partons d'un exemple où des logs sont entrés, à raison d'une table de logs par mois. Ces différentes tables (ou tables annexes) sont en lecture seule et peuvent être réunies en une seule grâce au moteur MERGE. Il est à noter aussi, que pour des opérations de maintenances, il est plus rapide de les exécuter sur plusieurs petits fichiers (une table MyISAM = un fichier) que sur un fichier qui possède un gros volume de données.

Structure d'utilisation Merge
Structure d'utilisation Merge
Exemple d'utilisation
Sélectionnez

CREATE TABLE LogJanvier2007 (
    idlog INT NOT NULL AUTO_INCREMENT PRIMARY_KEY,
    log VARCHAR(255));

CREATE TABLE LogFevrier2007 (
    idlog INT NOT NULL AUTO_INCREMENT PRIMARY_KEY,
    log VARCHAR(255))

CREATE TABLE Log2007(
   idlog INT NOT NULL AUTO_INCREMENT PRIMARY_KEY,
   log VARCHAR(255))
TYPE = MERGE UNION=(LogJanvier2007, LogFevrier2007) INSERT_METHODE = LAST;
)

INSERT INTO LogJanvier2007(log)
VALUES 
('Boumbo;  10-01-2007 10:12:00;  External'), 
('Sylvianne; 11-01-2007 14:12:54; External'), 
('Albertus;15-01-2007 23:01:20; Internal');

INSERT INTO LogFevrier2007(log) 
VALUES 
('Choulse;  14-02-2007 8:12:56; External'), 
('Prospere; 20-02-2007 11:25:17; Internal'), 
('Gorgio;20-02-2007 11:26:32; External');
Selection sur la table de type Merge
Sélectionnez

SELECT * Log2007			
------------------------------------------------
|idLog | Log
| 1    | David;  10-01-2007 10:12:00;  External
| 2    | Sylvianne; 11-01-2007 14:12:54; External
| 3    | Albertus;15-01-2007 23:01:20; Internal
| 1    | Choulse;  14-02-2007 8:12:56; External
| 2    | Babacou; 20-02-2007 11:25:17; Internal
| 3    | Gorgio;20-02-2007 11:26:32; External

Il est à noter que les "identifiants uniques" ne le sont pas dans une table de type MERGE, mais le sont dans chacune des tables annexes. Les insertions de données (INSERT) sont possibles dans ce type de table, à condition de spécifier dans quelle table annexe les données doivent être insérées.

C'est possible grâce à l'option INSERT_METHOD spécifiée lors de la création de la table.

 
Sélectionnez

CREATE TABLE Log2007(
   idlog INT NOT NULL AUTO_INCREMENT PRIMARY_KEY,
   log VARCHAR(255))
TYPE = MERGE UNION=(LogJanvier2007, LogFevrier2007) INSERT_METHODE = LAST;);

Il y a 3 paramètres pour l'option INSERT_METHOD :

Les valeurs possibles sont :
  • NO : Pour interdire toute création d'enregistrement via la table MERGE
  • FIRST : Les enregistrements seront inscrits dans la première table définie dans la liste UNION.
  • LAST : Les enregistrements seront inscrits dans la dernière table définie dans la liste UNION.

S'il est nécessaire d'insérer des enregistrements dans une table spécifique, alors l'opération devra être directement faite sur la table annexe.

VI-C. Fonctionnalités

Avantages
  • Vu que les tables sont de type MyISAM, elles héritent des mêmes avantages
  • La maintenance des tables annexes est facilitée par leur taille
  • La mise en place (facile à faire et à défaire)
  • MERGE permet de mettre en place un partitionnement horizontal pour les versions antérieures de MySQL inférieures à la 5.1. A partir de cette dernière version, MySQL prend en charge le partitionnement horizontal quel que soit le moteur de stockage.
  • La rapidité d'exécution
Inconvénients
  • L'obligation d'utiliser les tables de type MyISAM et donc les inconvénients de ce moteur
  • Les index ne sont pas uniques.
  • Le nombre élevé de fichiers sur la machine. Etant donné que le moteur MERGE utilise des tables de type MyISAM, chaque table annexe correspond à un fichier. S'il y a une table annexe par mois, il y aura donc 12 fichiers.
  • La recherche par clés. Obligation de parcourir le catalogue de chaque table, ce qui ralentit le processus

VI-D. Conclusion

Le moteur MERGE permet d'administrer une base de données plus finement en termes de gestion de performances du serveur, en termes de droits sur les tables ainsi qu'en termes de maintenance sur les tables.
L'impossibilité d'annexion de tables se trouvant en dehors de la base de données, et ce même via une vue, est pénalisante.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 Developpez.com. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.