Datenmanagement

Tabelle klonen: Sofortige Snapshots ohne Datenduplikation erstellen

Actian Germany GmbH

27. September 2024

Tabelle Klonen Konzept Zusammenfassung

Was ist das Klonen von Tabellen?

Das Klonen von Tabellen ist eine Datenbankoperation, bei der eine Kopie einer X100-Tabelle erstellt wird, ohne dass das Kopieren der zugrunde liegenden Daten zu Leistungseinbußen führt. Wenn Sie auf der Suche nach der SQL-Syntax für das Klonen einer Tabelle in Actian Vector sind, funktioniert das folgendermaßen:

CREATE TABLE newtable CLONE existingtable
[, newtable2 CLONE existingtable2, ...]
            [ WITH <option, option, ...> ];

Die MIT-Optionen sind hier kurz aufgeführt. Wir werden sie später ausführlicher erläutern.

WITH <option>
NODATA
Klonen Sie nur die Tabellenstruktur, nicht ihren Inhalt.
GRANDE
Kopieren Sie auch Berechtigungen aus bestehenden Tabellen in neue Tabellen.
REFERENZEN=     
     NONE
   | EINGESCHRÄNKT
   | ERWEITERT
Deaktivieren Sie die Erstellung von Referenzen zwischen neuen Tabellen (NONE), erstellen Sie Referenzen zwischen neuen Tabellen, die denen zwischen bestehenden Tabellen entsprechen (RESTRICTED, Standardeinstellung), oder aktivieren Sie zusätzlich die Erstellung von Referenzen von neuen Tabellen auf bestehende Tabellen, die nicht geklont werden (EXTENDED).

Die neue Tabelle - der "Klon" - hat denselben Inhalt wie die vorhandene Tabelle zum Zeitpunkt des Klonens. Das Wichtigste ist, dass der Klon, den Sie erstellt haben , nur eine Tabelle ist. Nicht mehr und nicht weniger. Sie sieht genauso aus wie eine Kopie. Die neue Tabelle kann später eingefügt, aktualisiert, gelöscht und sogar gelöscht werden, ohne dass sich dies auf die ursprüngliche Tabelle auswirkt - und umgekehrt.

Bei der Entwicklung dieser Funktion wurden häufig Fragen gestellt wie "Kann man eine Ansicht auf einem Klon erstellen?" oder "Kann man einen Klon aktualisieren?" und "Kann man einem Klon Berechtigungen erteilen?" Die Antwort lautet in allen Fällen: Ja. Es handelt sich um eine Tabelle. Wenn es Ihnen hilft, nachdem Sie eine Tabelle geklont haben, können Sie einfach vergessen, dass die Tabelle mit der CLONE-Syntax erstellt wurde. Genau das macht Vector.

Was ist kein Tischklonen?

Genauso wichtig ist es, zu wissen, was das Klonen von Tabellen nicht ist. Sie können eine X100-Tabelle nur innerhalb derselben Datenbank klonen, entweder mit ihrem gesamten Inhalt oder gar nicht. Sie können nicht nur einen Teil einer Tabelle klonen, oder eine Tabelle zwischen zwei Datenbanken klonen.

Wozu ist das gut?

Mit Table Cloning können Sie kostengünstige Kopien einer bestehenden X100-Tabelle erstellen. Dies kann z.B. nützlich sein, um tägliche Snapshots einer Tabelle zu erstellen und aufrechtzuerhalten, die sich im Laufe der Zeit allmählich ändert. Diese Snapshots können wie jede andere Tabelle abgefragt werden.

Die Benutzer können auch experimentelle Kopien von Tabellensätzen erstellen und Änderungen an diesen ausprobieren, bevor sie diese Änderungen auf die Originaltabellen anwenden. Auf diese Weise können die Benutzer schneller und sicherer mit Tabellen experimentieren.

Wie das Klonen von Tabellen funktioniert

Wenn im Speichermodell von X100 ein Block mit Tabellendaten in den Speicher geschrieben wird, wird dieser Block nie verändert, sondern nur gelöscht, wenn er nicht mehr benötigt wird. Wenn der Inhalt der Tabelle geändert wird, wird ein neuer Block mit den neuen Daten geschrieben, und die Liste der Speicherblöcke der Tabelle wird aktualisiert, um den neuen Block aufzunehmen und den alten auszuschließen.

Blockdiagramm zum Klonen von Tabellen

X100 Katalog und Speicherung für eine einspaltige Tabelle MYTABLE mit zwei Speicherblöcken.

Es gibt nichts, was X100 daran hindert, eine Tabelle zu erstellen, die auf die Speicherblöcke einer anderen Tabelle verweist, solange wir wissen, welche Speicherblöcke noch von mindestens einer Tabelle referenziert werden. Das ist es, was wir tun, um eine Tabelle zu klonen. Auf diese Weise kann X100 so etwas wie eine Kopie der Tabelle erstellen, ohne die zugrunde liegenden Daten kopieren zu müssen.

In der folgenden Abbildung verweist mytableclone auf die gleichen Speicherblöcke wie mytable.

Blockdiagramm zum Klonen von Tabellen

X100-Katalog und -Speicher, nachdem MYTABLECLONE als Klon von MYTABLE erstellt wurde.

Beachten Sie, dass jede Tabellenspalte, einschließlich der Spalte in der neuen Tabelle, eine Speicherdatei "besitzt", die die Zieldatei für alle neuen Speicherblöcke für diese Spalte ist. Wenn also im obigen Diagramm neue Zeilen zu mytableclone hinzugefügt werden, wird der neue Block zu seiner eigenen Speicherdatei hinzugefügt:

Blockdiagramm zum Klonen von Tabellen

X100-Katalog und -Speicher, nachdem ein weiterer Speicherblock zu MYTABLECLONE hinzugefügt wurde.

X100-Tabellen können auch in-memory haben, die beim Scannen der Tabelle zusätzlich zu den Speicherblöcken angewendet werden. Diese in-memory werden nicht geklont, sondern kopiert. Das bedeutet, dass eine Tabelle, die in letzter Zeit viele Aktualisierungen erfahren hat, möglicherweise nicht sofort geklont wird.

Mein erster Klon: Ein einfaches Beispiel

Erstellen Sie eine Tabelle (beachten Sie, dass bei Actian Ingres WITH STRUCTURE=X100 erforderlich ist, um sicherzustellen, dass Sie eine X100-Tabelle erhalten):

CREATE TABLE mytable (c1 INT, c2 VARCHAR(10)) WITH STRUCTURE=X100;

Fügen Sie einige Zeilen ein:

INSERT INTO mytable VALUES (1, 'eins'), (2, 'zwei'), (3, 'drei'), (4, 'vier'), (5, 'fünf');

Erstellen Sie einen Klon dieser Tabelle mit dem Namen myclone:

CREATE TABLE myclone CLONE mytable;

Die Tabellen haben nun den gleichen Inhalt:

SELECT * FROM mytable;
c1 c2
1 eine
2 zwei
3 drei
4 vier
5 fünf
SELECT * FROM myclone;
c1 c2
1 eine
2 zwei
3 drei
4 vier
5 fünf

Beachten Sie, dass es keine weitere Beziehung zwischen der Tabelle und ihrem Klon gibt. Die beiden Tabellen können unabhängig voneinander geändert werden, so als hätten Sie die neue Tabelle mit CREATE TABLE ... AS SELECT ...

UPDATE mytable SET c2 = 'trois' WHERE c1 = 3;
INSERT INTO mytable VALUES (6, 'sechs');
DELETE FROM myclone WHERE c1 = 1;
SELECT * FROM mytable;
c1 c2
1 eine
2 zwei
3 trois
4 vier
5 fünf
6 sechs
SELECT * FROM myclone;
c1 c2
2 zwei
3 drei
4 vier
5 fünf

Sie können sogar die Originaltabelle löschen, ohne dass der Klon davon betroffen ist:

DROP TABLE mytable;

SELECT * FROM myclone;
c1 c2
2 zwei
3 drei
4 vier
5 fünf

Sicherheit und Berechtigungen

Sie können jede Tabelle klonen, für die Sie die Berechtigung SELECT besitzen, auch wenn sie Ihnen nicht gehört.

Wenn Sie eine Tabelle erstellen, sei es durch Klonen oder auf andere Weise, gehört sie Ihnen. Das bedeutet, dass Sie alle Privilegien für sie haben, einschließlich des Privilegs, sie zu löschen.

Standardmäßig sind die Privilegien, die andere Personen auf Ihrem neu erstellten Klon haben, die gleichen, wie wenn Sie eine Tabelle auf normale Weise erstellen würden. Wenn Sie möchten, dass alle Privilegien, die anderen Benutzern auf der bestehenden Tabelle gewährt wurden, auch dem Klon gewährt werden, verwenden Sie WITH GRANTS.

Metadaten

Die Option WITH NODATA erstellt eine leere Kopie der vorhandenen Tabelle(n), aber nicht den Inhalt. Wenn Sie dies tun, tun Sie natürlich nichts, was Sie nicht auch mit vorhandenem SQL tun könnten, aber es kann einfacher sein, die CLONE-Syntax zu verwenden, um eine Metadaten einer Gruppe von Tabellen mit komplizierten referentiellen Beziehungen zwischen ihnen zu erstellen.

Die Option WITH NODATA ist auch bei Actian Ingres 12.0 nützlich. Die Klon-Funktionalität funktioniert nur mit X100-Tabellen, aber Actian Ingres 12.0 ermöglicht es Ihnen, Metadaten von Nicht-X100-Ingres-Tabellen zu erstellen, wie zum Beispiel Heap-Tabellen.

Mehrere Tabellen auf einmal klonen

Wenn Sie eine Reihe von Tabellen haben, die durch Fremdschlüsselbeziehungen verbunden sind, können Sie diese klonen, um eine Reihe von Tabellen zu erstellen, die durch dieselben Beziehungen verbunden sind, solange Sie sie alle in derselben Anweisung klonen.

Nehmen wir zum Beispiel an, wir haben den LIEFERANTEN, TEIL und TEIL_SUPP wie folgt definiert:

CREATE TABLE lieferant (
lieferant_id INT PRIMARY KEY,
lieferant_name VARCHAR(40),
lieferant_adresse VARCHAR(200)
);

CREATE TABLE part (
part_id INT PRIMARY KEY,
teil_name VARCHAR(40)
);

CREATE TABLE part_supp (
supplier_id INT REFERENCES supplier(supplier_id),
part_id INT REFERENCES part(part_id),
kosten DECIMAL(6, 2)
);

Wenn wir diese drei Tabellen auf einmal klonen wollen, können wir mehrere Tabellenpaare an die Klon-Anweisung übergeben:

CREATE TABLE
supplier_clone CLONE supplier,
part_clone CLONE part,
part_supp_clone CLONE part_supp;

Wir haben jetzt Klone der drei Tabellen. PART_SUPP_CLONE verweist auf die neuen Tabellen SUPPLIER_CLONE und PART_CLONE - sie verweist nicht auf die alten Tabellen PART und SUPPLIER.

Ohne Table Cloning müssten wir die neuen Tabellen mit denselben Definitionen wie die vorhandenen Tabellen selbst erstellen und dann die Daten in die neuen Tabellen kopieren, was durch die erforderlichen Prüfungen der referentiellen Integrität weiter verlangsamt würde. Mit Table Cloning muss das Datenbankmanagementsystem keine kostspielige referentielle Integritätsprüfung für die neuen Tabellen durchführen, da ihr Inhalt mit dem der vorhandenen Tabellen übereinstimmt, die die gleichen Einschränkungen haben.

MIT REFERENZEN=KEINE

Sie wollen nicht, dass Ihre Klone untereinander Referenzen haben? Dann verwenden Sie WITH REFERENCES=NONE:

CREATE TABLE
supplier_clone CLONE supplier,
part_clone CLONE part,
teil_lieferant_klon CLONE teil_lieferant
MIT REFERENZEN=KEINE;

MIT REFERENZEN=ERWEITERT

Normalerweise erstellt die CLONE-Anweisung nur Referenzen zwischen den neu erstellten Klonen.

Wenn Sie zum Beispiel nur PART und PART_SUPP geklont haben:

CREATE TABLE
part_clone CLONE part,
part_supp_clone CLONE part_supp;

PART_SUPP_CLONE hätte einen Fremdschlüsselbezug zu PART_CLONE, aber nicht zu SUPPLIER.

Was aber, wenn Sie möchten, dass alle Klone, die Sie in einer Anweisung erstellen, ihre Fremdschlüssel beibehalten, auch wenn das bedeutet, dass Sie auf die Originaltabellen verweisen? Das können Sie, wenn Sie wollen, mit WITH REFERENCES=EXTENDED tun:

CREATE TABLE
part_clone CLONE part,
part_supp_clone CLONE part_supp
MIT REFERENCES=EXTENDED;

Nach dem obigen SQL würde PART_SUPP_CLONE auf PART_CLONE und SUPPLIER verweisen.

Klonen von Tabellen Use Case und Vorteile in der Praxis

Die Möglichkeit, Tabellen zu klonen, eröffnet neue Anwendungsfälle. So kann beispielsweise ein großes E-Commerce-Unternehmen das Klonen von Tabellen nutzen, um seine Produktionsauftragsdatenbank zu replizieren. Dies ermöglicht einfachere Berichte und Analysen, ohne die Leistung des Live-Systems zu beeinträchtigen. Die Vorteile umfassen:

  • Geringere Latenzzeit bei der Berichterstattung. Bisher wurden Berichte über Nacht mit Batch-ETL-Prozessen erstellt. Durch das Klonen von Tabellen können Berichte nahezu in Echtzeit erstellt werden, was eine schnellere Entscheidungsfindung ermöglicht. Es kann auch verwendet werden, um einen kostengünstigen täglichen oder wöchentlichen Snapshot einer Tabelle zu erstellen, die schrittweise Änderungen erfährt.
  • Verbesserte Produktivität der Analysten. Analysten müssen nicht mehr eine vollständige Kopie einer Tabelle erstellen, um Änderungen auszuprobieren. Sie können die Tabelle klonen und stattdessen an dem Klon arbeiten, ohne auf eine große Tabellenkopie warten oder das Original modifizieren zu müssen.
  • Kosteneinsparungen. Ein Klon nimmt zunächst keinen zusätzlichen Speicherplatz in Anspruch, da er nur auf die Speicherblöcke der Originaltabelle verweist. Neue Speicherblöcke werden nur bei Bedarf geschrieben, wenn die Tabelle geändert wird. Das Klonen von Tabellen würde daher die Speicherkosten im Vergleich zur Unterhaltung eines separaten Data Warehouse für die Berichterstattung senken.

Dieses hypothetische Beispiel veranschaulicht die potenziellen Vorteile des Tabellenklonens in einem realen Szenario. Durch eine effektive Implementierung des Tabellenklonens können Sie erhebliche Verbesserungen in Bezug auf Entwicklungsgeschwindigkeit, Leistung, Kosteneinsparungen und betriebliche Effizienz erzielen.

Snapshot-Kopien von X100-Tabellen erstellen

Table Cloning ermöglicht die kostengünstige Erstellung von Snapshot-Kopien von bestehenden X100-Tabellen. Diese neuen Tabellen sind eigenständige Tabellen, die unabhängig von den Originalen geändert werden können.

Actian Vector 7.0, das im Herbst verfügbar sein wird, bietet Table Cloning. Sie werden in der Lage sein, jederzeit Snapshots von Tabellendaten zu erstellen und gleichzeitig zu früheren Zuständen zurückzukehren, ohne Speicherplatz zu duplizieren. Mit dieser Funktion zum Klonen von Tabellen können Sie schnell Szenarien testen, Daten in einem früheren Zustand wiederherstellen und Speicherkosten reduzieren. Erfahren Sie mehr.

actian avatar logo

Über Actian Corporation

Actian macht Daten einfach. Unsere Datenplattform vereinfacht die Verbindung, verwalten und Analyse von Daten in Cloud, Hybrid- und On-Premises . Mit jahrzehntelanger Erfahrung in den Bereichen Datenmanagement und Analytik liefert Actian High-Performance Lösungen, die Unternehmen in die Lage versetzen, data driven Entscheidungen zu treffen. Actian wird von führenden Analysten anerkannt und hat Branchenauszeichnungen für Leistung und Innovation erhalten. Unsere Teams präsentieren bewährte Anwendungsfälle auf Konferenzen (z. B. Strata Data) und tragen zu Open-Source-Projekten bei. Im Actian-Blog behandeln wir Themen, die von Dateneingang bis hin zu KI-gesteuerter Analytik reichen. Lernen Sie das Führungsteam kennen https://www.actian.com/company/leadership-team/