Gestion des données

Clonage de table : Créer des instantanés sans duplication des données

Actian Corporation

27 septembre 2024

concept de clonage de table abstrait

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.

diagramme de blocs pour le clonage de tables

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.

diagramme de blocs pour le clonage de tables

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 :

diagramme de blocs pour le clonage de tables

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.

logo avatar actian

À propos d'Actian Corporation

Actian facilite l'accès aux données. Notre plateforme de données simplifie la façon dont les gens connectent, gèrent et analysent les données dans les environnements cloud, hybrides et sur site . Avec des décennies d'expérience dans la gestion des données et l'analyse, Actian fournit des solutions de de haute performance qui permettent aux entreprises de prendre des décisions basées sur les données. Actian est reconnu par les principaux analystes et a reçu des prix de l'industrie pour sa performance et son innovation. Nos équipes partagent des cas d'utilisation éprouvés lors de conférences (par exemple, Strata Data) et contribuent à des projets à code source ouvert. Sur le blog d'Actian, nous abordons des sujets tels que l'ingestion de données en temps réel, l'analyse de données, la gouvernance données, la gestion des données, la qualité des données, l'intelligence des données et l'analyse pilotée par l'IA.