Clonage de table : Créer des instantanés sans duplication des données
Actian Corporation
27 septembre 2024

Qu'est-ce que le clonage de table ?
Le clonage de table est une opération de base de données qui permet de faire une copie d'une table X100 sans la pénalité de performance liée à la copie des données sous-jacentes. Si vous êtes arrivé ici en cherchant la syntaxe SQL pour cloner une table dans Actian Vector, cela fonctionne comme suit :
CREATE TABLE newtable CLONE existingtable [, newtable2 CLONE existingtable2, ...] [ WITH <option, option, ...> ];
Les options WITH sont brièvement énumérées ici. Nous les expliquerons plus en détail par la suite.
WITH <option> | |
NODATA |
Clonez uniquement la structure du tableau, pas son contenu. |
BOURSES |
Copiez également les privilèges des tables existantes vers les nouvelles tables. |
RÉFÉRENCES= NONE | RESTRICTED | EXTENDED (ÉTENDU) |
Désactiver la création de références entre les nouvelles tables (NONE), créer des références entre les nouvelles tables pour qu'elles correspondent à celles entre les tables existantes (RESTRICTED, la valeur par défaut), ou activer en plus la création de références entre les nouvelles tables et les tables existantes qui ne sont pas clonées (EXTENDED). |
Le nouveau tableau - le "clone" - a le même contenu que le tableau existant au moment du clonage. La principale chose à retenir est que le clone que vous avez créé n'est qu'une table. Ni plus ni moins. Il ressemble exactement à une copie. Le nouveau tableau peut par la suite être inséré, mis à jour, supprimé et même supprimé, sans affecter le tableau d'origine, et vice versa.
Lors du développement de cette fonctionnalité, il est devenu courant de répondre à des questions telles que "Pouvez-vous créer une vue sur un clone ?" ou "Pouvez-vous mettre à jour un clone ?" et "Pouvez-vous accorder des privilèges à un clone ?" Dans tous les cas, la réponse est oui. Il s'agit d'une table. Si cela peut vous aider, après avoir cloné une table, vous pouvez simplement oublier que la table a été créée avec la syntaxe CLONE. C'est ce que fait Vector.
Qu'est-ce qui n'est pas du clonage de table ?
Il est tout aussi important de savoir ce que le clonage de table n'est pas. Vous ne pouvez cloner une table X100, tout son contenu ou rien du tout, que dans la même base de données. Vous ne pouvez pas cloner une partie seulement d'une table, ni cloner une table entre deux bases de données.
À quoi ça sert ?
Le clonage de table permet de réaliser des copies peu coûteuses d'une table X100 existante. Cela peut s'avérer utile pour créer et conserver des instantanés quotidiens d'une table qui change progressivement au fil du temps, par exemple. Ces instantanés peuvent être interrogés comme n'importe quelle autre table.
Les utilisateurs peuvent également faire des copies expérimentales d'ensembles de tableaux et essayer des modifications sur ces copies, avant d'appliquer ces modifications aux tableaux originaux. Cela permet aux utilisateurs d'expérimenter plus rapidement les tableaux en toute sécurité.
Comment fonctionne le clonage de tableaux
Dans le modèle de stockage du X100, lorsqu'un bloc de données de table est écrit dans le stockage, ce bloc n'est jamais modifié, sauf pour être supprimé lorsqu'il n'est plus nécessaire. Si le contenu de la table est modifié, un nouveau bloc est écrit avec les nouvelles données et la liste des blocs de stockage de la table est mise à jour pour inclure le nouveau bloc et exclure l'ancien.
Catalogue et stockage X100 pour un tableau à une colonne MYTABLE, avec deux blocs de stockage.
Rien n'empêche X100 de créer une table qui fait référence aux blocs de stockage d'une autre table, tant que nous savons quels blocs de stockage sont encore référencés par au moins une table. C'est donc ce que nous faisons pour cloner une table. Cela permet à X100 de créer ce qui ressemble à une copie de la table, sans avoir à copier les données sous-jacentes.
Dans l'image ci-dessous, mytableclone fait référence aux mêmes blocs de stockage que mytable.
Catalogue et stockage X100 après la création de MYTABLECLONE en tant que clone de MYTABLE.
Notez que chaque colonne de la table, y compris la colonne de la nouvelle table, "possède" un fichier de stockage, qui est le fichier de destination de tous les nouveaux blocs de stockage pour cette colonne. Ainsi, si de nouvelles lignes sont ajoutées à mytableclone dans le diagramme ci-dessus, le nouveau bloc sera ajouté à son propre fichier de stockage :
Catalogue et stockage X100 après l'ajout d'un autre bloc de stockage à MYTABLECLONE.
Les tables X100 peuvent également comporter des mises à jour in-memory , qui sont appliquées au-dessus des blocs de stockage lorsque la table est analysée. Ces mises à jour in-memory ne sont pas clonées, mais copiées. Cela signifie qu'une table qui a récemment fait l'objet d'un grand nombre de mises à jour peut ne pas se cloner instantanément.
Mon premier clone : Un exemple simple
Créez une table (notez que sur Actian Ingres, WITH STRUCTURE=X100 est nécessaire pour s'assurer que vous obtenez une table X100) :
CREATE TABLE mytable (c1 INT, c2 VARCHAR(10)) WITH STRUCTURE=X100 ;
Insérez-y quelques lignes :
INSERT INTO mytable VALUES (1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five') ;
Créez un clone de cette table appelé myclone :
CREATE TABLE myclone CLONE mytable ;
Les tableaux ont maintenant le même contenu :
SELECT * FROM mytable ;
c1 | c2 |
1 | un |
2 | deux |
3 | trois |
4 | quatre |
5 | cinq |
SELECT * FROM myclone ;
c1 | c2 |
1 | un |
2 | deux |
3 | trois |
4 | quatre |
5 | cinq |
Notez qu'il n'y a plus de relation entre la table et son clone. Les deux tables peuvent être modifiées indépendamment, comme si vous aviez créé la nouvelle table avec CREATE TABLE ... AS SELECT ...
UPDATE mytable SET c2 = 'trois' WHERE c1 = 3 ; INSERT INTO mytable VALUES (6, 'six') ; DELETE FROM myclone WHERE c1 = 1 ;
SELECT * FROM mytable ;
c1 | c2 |
1 | un |
2 | deux |
3 | trois |
4 | quatre |
5 | cinq |
6 | six |
SELECT * FROM myclone ;
c1 | c2 |
2 | deux |
3 | trois |
4 | quatre |
5 | cinq |
Vous pouvez même supprimer le tableau original, et le clone n'est pas affecté :
DROP TABLE mytable ; SELECT * FROM myclone ;
c1 | c2 |
2 | deux |
3 | trois |
4 | quatre |
5 | cinq |
Sécurité et autorisations
Vous pouvez cloner n'importe quelle table dont vous avez le privilège de SELECTIONNER, même si elle ne vous appartient pas.
Lorsque vous créez une table, que ce soit par clonage ou autrement, elle vous appartient. Cela signifie que vous disposez de tous les privilèges sur cette table, y compris celui de la supprimer.
Par défaut, les privilèges accordés à d'autres personnes sur le clone nouvellement créé sont les mêmes que si vous aviez créé une table de la manière habituelle. Si vous souhaitez que tous les privilèges accordés à d'autres utilisateurs sur la table existante soient accordés au clone, utilisez WITH GRANTS.
métadonnées Clone métadonnées
L'option WITH NODATA créera une copie vide de la ou des tables existantes, mais pas de leur contenu. Si vous faites cela, vous ne faites rien que vous ne puissiez faire avec le SQL existant, bien sûr, mais il peut être plus facile d'utiliser la syntaxe CLONE pour faire une copie métadonnées d'un groupe de tables avec des relations référentielles compliquées entre elles.
L'option WITH NODATA est également utile sur Actian Ingres 12.0. La fonctionnalité de clonage ne fonctionne qu'avec les tables X100, mais Actian Ingres 12.0 vous permet de créer des clones métadonnées de tables Ingres non X100, telles que les tables de tas.
Clonage de plusieurs tables à la fois
Si vous disposez d'un ensemble de tables reliées par des relations de clés étrangères, vous pouvez les cloner pour créer un ensemble de tables reliées par les mêmes relations, à condition de les cloner toutes dans la même déclaration.
Par exemple, supposons que nous ayons le FOURNISSEUR, la PARTIE et la PARTIE_SUPP, définis comme suit :
CREATE TABLE supplier ( supplier_id INT PRIMARY KEY, nom_du_fournisseur VARCHAR(40), adresse_du_fournisseur VARCHAR(200) ) ; CREATE TABLE part ( part_id INT PRIMARY KEY, nom_de_la_partie VARCHAR(40) ) ; CREATE TABLE part_supp ( supplier_id INT REFERENCES supplier(supplier_id), part_id INT REFERENCES part(part_id), cost DECIMAL(6, 2) ) ;
Si nous voulons cloner ces trois tables en une seule fois, nous pouvons fournir plusieurs paires de tables à l'instruction clone :
CREATE TABLE supplier_clone CLONE fournisseur, part_clone CLONE part, part_supp_clone CLONE part_supp ;
Nous avons maintenant des clones des trois tables. PART_SUPP_CLONE fait référence aux nouvelles tables SUPPLIER_CLONE et PART_CLONE - elle ne fait pas référence aux anciennes tables PART et SUPPLIER.
Sans le clonage de tables, nous devrions créer nous-mêmes les nouvelles tables avec les mêmes définitions que les tables existantes, puis copier les données dans les nouvelles tables, ce qui serait encore ralenti par les contrôles d'intégrité référentielle nécessaires. Avec le clonage de tables, le système de gestion de base de données n'a pas besoin d'effectuer une vérification coûteuse de l'intégrité référentielle des nouvelles tables, car leur contenu est identique à celui des tables existantes, qui ont les mêmes contraintes.
AVEC RÉFÉRENCES=NONE
Vous ne voulez pas que vos clones aient des références les uns aux autres ? Utilisez alors WITH REFERENCES=NONE :
CREATE TABLE supplier_clone CLONE fournisseur, part_clone CLONE part, part_supp_clone CLONE part_supp AVEC REFERENCES=NONE ;
AVEC RÉFÉRENCES=ÉTENDU
Normalement, l'instruction CLONE ne crée que des références entre les clones nouvellement créés.
Par exemple, si vous n'avez cloné que PART et PART_SUPP :
CREATE TABLE part_clone CLONE part, part_supp_clone CLONE part_supp ;
PART_SUPP_CLONE aurait une référence de clé étrangère à PART_CLONE, mais pas à SUPPLIER.
Mais que se passe-t-il si vous souhaitez que tous les clones que vous créez dans une déclaration conservent leurs clés étrangères, même si cela implique de référencer les tables d'origine ? Vous pouvez le faire en utilisant WITH REFERENCES=EXTENDED :
CREATE TABLE part_clone CLONE part, part_supp_clone CLONE part_supp AVEC REFERENCES=EXTENDED ;
Après le code SQL ci-dessus, PART_SUPP_CLONE fera référence à PART_CLONE et à SUPPLIER.
cas d'usage du clonage de table et avantages concrets
La possibilité de cloner des tables ouvre la voie à de nouveaux cas d'utilisation. Par exemple, une grande entreprise de commerce électronique peut utiliser le clonage de tables pour répliquer sa base de données de commandes de production. Cela permet de faciliter la création de rapports et l'analyse sans affecter les performances du système en place. Les avantages sont les suivants
- Réduction du temps de latence des rapports. Auparavant, les rapports étaient générés pendant la nuit à l'aide de processus ETL par lots. Le clonage de table permet de créer des rapports en temps quasi réel, ce qui accélère la prise de décision. Il peut également être utilisé pour créer à moindre coût un instantané quotidien ou hebdomadaire d'une table qui subit des modifications progressives.
- Amélioration de la productivité des analystes. Les analystes n'ont plus besoin de faire une copie complète d'une table pour tester des modifications. Ils peuvent cloner la table et travailler sur le clone à la place, sans avoir à attendre la copie d'une grande table ou à modifier l'original.
- Réduction des coûts. Un clone n'occupe initialement aucun espace de stockage supplémentaire, car il ne fait référence qu'aux blocs de stockage de la table d'origine. De nouveaux blocs de stockage ne sont écrits qu'en cas de modification de la table. Le clonage de table réduirait donc les coûts de stockage par rapport au maintien d'un entrepôt de données distinct pour le reporting.
Cet exemple hypothétique illustre les avantages potentiels du clonage de table dans un scénario réel. En mettant en œuvre le clonage de tableaux de manière efficace, vous pouvez obtenir des améliorations significatives en termes de vitesse de développement, de performances, de réduction des coûts et d'efficacité opérationnelle.
Créer des copies instantanées des tables X100
Le clonage de tables permet de créer à peu de frais des copies instantanées de tables X100 existantes. Ces nouvelles tables sont des tables à part entière, qui peuvent être modifiées indépendamment des originaux.
Actian Vector 7.0, disponible cet automne, offrira le clonage de table. Vous pourrez facilement créer des instantanés des données des tables à tout moment, tout en ayant la possibilité de revenir à des états antérieurs sans dupliquer le stockage. Grâce à cette fonctionnalité de clonage de table, vous pourrez rapidement tester des scénarios, restaurer des données à un état antérieur et réduire les coûts de stockage. Pour en savoir plus.
S'abonner au blog d'Actian
Abonnez-vous au blogue d'Actian pour recevoir des renseignements sur les données directement à vous.
- Restez informé - Recevez les dernières informations sur l'analyse des données directement dans votre boîte de réception.
- Ne manquez jamais un article - Vous recevrez des mises à jour automatiques par courrier électronique pour vous avertir de la publication de nouveaux articles.
- Tout dépend de vous - Modifiez vos préférences de livraison en fonction de vos besoins.