StretchDB - Die Datenbank wächst in die Cloud
Mit StretchDB hat Microsoft dem SQL Server 2016 ein Feature hinzugefügt, das eine nahezu beliebige Erweiterung von Datenbanken in der Cloud ermöglicht. Dabei lassen sich vollständige Datenbanken wie auch einzelne Tabellen ganz oder teilweise in die Azure DB auslagern, ohne dass sich auf Abfrageseite etwas ändert. Abfragen an eine solche Tabelle werden automatisch vom Cross Platform Query Optimizer angepasst, sodass Teile lokal und Teile in der Cloud ausgeführt werden und das Ergebnis gemeinsam zurück geliefert wird.
Eine Möglichkeit von StretchDB besteht zum Beispiel darin, historische Daten ("Cold Data"), die man kaum nutzt, in die Cloud zu verschieben, während aktuelle Daten ("Hot Data") On-Premise vorgehalten werden. So wird die On-Premise-Datenbank entlastet und dennoch bleiben auch die historischen Daten permanent im direkten Zugriff.
Historische Daten mit StretchDB auslagernIm Folgenden ein konkretes Beispiel für die Auslagerung historischer Daten mit Stretch DB. Wir erzeugen zunächst eine Tabelle:
- CREATE TABLE dbo.stammdaten
- (
- id int identity(1,1),
- name nvarchar(50),
- vorname nvarchar(50),
- jahr int
- )
Diese befüllen wir mit 1.000.000 zufälligen Daten:
- with f10 AS
- (
- SELECT * FROM
- ( VALUES
- (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)
- ) AS B (f)
- )
- , f1000 AS
- (
- SELECT
- f = a.f+b.f*10+c.f*100
- FROM f10 a
- CROSS JOIN f10 b
- CROSS JOIN f10 c
- )
- , f1000000 AS
- (
- SELECT
- f= a.f + b.f*1000
- FROM f1000 a
- CROSS JOIN f1000 b
- )
- INSERT INTO dbo.stammdaten
- (name, vorname, jahr)
- SELECT
- nachname = NCHAR(CAST(65+26 * RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT))
- + NCHAR(CAST(65+26 * RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT))
- + NCHAR(CAST(65+26 * RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT))
- + NCHAR(CAST(65+26 * RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT))
- ,vorname =
- NCHAR(CAST(65+26 * RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT))
- + NCHAR(CAST(65+26 * RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT))
- + NCHAR(CAST(65+26 * RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT))
- + NCHAR(CAST(65+26 * RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT))
- ,jahr = CAST( 2000+16*RAND( ABS(CHECKSUM(CAST(NEWID() AS VARCHAR(100)))) ) AS INT)
- FROM f1000000
Das Script erzeugt Daten wie folgt: Wir wollen nun alle Daten vor 2010 in die Cloud auslagern. Dazu aktivieren wir auf der Datenbank über Tasks die Funktion „Stretch“:
Im folgenden Dialog können wir auswählen, ob eine ganze Tabelle oder Teile ausgelagert werden sollen:
Und nun lässt sich die Regel erstellen, die wir anwenden wollen:
Tabelle auswählen:
Azure konfigurieren:
Abschließen:
Der Assistent erledigt nun alle erforderlichen Schritte:
Im Hintergrund werden nun alle Daten < 2010 Richtung AzureDB verschoben. Nach der Verteilung machen wir ein COUNT(*) auf die verschiedenen Zeitbereiche:
Der Execution Plan auf diese verteilte Tabelle zeigt uns nun, dass der Query Optimizer die Aufgaben verteilt. Neben den lokalen TableScans fragt er als Remote Query die AzureDB ab.
Fazit:
StretchDB lässt die Grenzen zwischen onPremise und AzureDB verschwinden und ermöglicht eine leicht zu administrierende Erweiterung einer lokalen Datenbank mit den Kapazitäten der Cloud.
Neuen Kommentar schreiben