Auf dieser Seite wird beschrieben, wie Spanner mit Primärschlüsseln funktioniert. Außerdem werden Migrationsstrategien für Primärschlüssel für die folgenden Anwendungsfälle vorgestellt:
- UUID-Schlüsseldatenbanken migrieren
- Datenbanken mit einer einzelnen Instanz mit sequenziellen Schlüsseln migrieren
- Migration von Datenbanken mit sequenziellen Schlüsseln mit Unterstützung für Live-Übergang
- Migration von Datenbanken mit sequenziellen Schlüsseln mit Abhängigkeiten von der Anwendungslogik
Ein typischer Ansatz für Primärschlüssel besteht darin, Ersatzschlüssel wie automatisch inkrementierte Zahlen zu verwenden. Solche Primärschlüssel bieten Flexibilität, um Ihre Schlüssel jetzt und in Zukunft zu optimieren, auch wenn sich Ihre Geschäftslogik ändert. In einer Datenbank mit einer einzelnen Instanz und geringem Volumen eignen sich sequenzielle Schlüssel gut. In einem verteilten System sind sequentielle Schlüssel jedoch nicht gut skalierbar.
Sequenzielle Primärschlüssel in Spanner
In Spanner hat jede Tabelle einen Primärschlüssel, der aus einer oder mehreren Spalten der Tabelle besteht. Mit dem Primärschlüssel wird jede Zeile in einer Tabelle eindeutig identifiziert. Spanner verwendet den Primärschlüssel, um Zeilengruppen, sogenannte Splits, auf Compute-Knoten in einer Spanner-Instanz zu verteilen. Dies wird als Bereichs-Sharding bezeichnet und ermöglicht es Spanner, Abfragen parallel auszuführen und zu skalieren.
Wenn Sie Zeilen mit Primärschlüsseln haben, deren Werte nahe beieinander liegen, z. B. monoton automatisch inkrementelle Schlüssel, werden sie in der Regel in derselben Teilung abgelegt. Dies kann zu einem Hotspot führen, bei dem die Aufteilung alle verfügbaren Rechen- und Arbeitsspeicherressourcen belegen kann. Ein Hotspot kann zu einer erhöhten Latenz führen, was möglicherweise zu Zeitüberschreitungen und abgebrochenen Transaktionen führt.
Um die Skalierbarkeit von Spanner zu nutzen und Hotspots zu vermeiden, bietet Spanner integrierte Lösungen als Alternative zu automatisch inkrementellen Primärschlüsseln.
Empfehlungen für Primärschlüssel
Für Primärschlüssel in Spanner wird standardmäßig die Verwendung von UUIDv4-Werten (Universally Unique Identifier Version 4) empfohlen. UUIDs sind 128‑Bit-IDs, die 122 Bit zufälliger Daten verwenden. UUIDv4-Werte haben einen großen Wertebereich und sind unabhängig davon, wo sie generiert werden, praktisch eindeutig. Sie eignen sich daher gut als Primärschlüssel ohne Hotspots in Spanner.
Sie können Ganzzahlprimärschlüssel verwenden, da sie weniger Speicherplatz belegen und die Komplexität der erforderlichen Anwendungsänderungen reduzieren. Mit einer positiven bitreversierten Sequenz können Sie eindeutige Primärschlüsselwerte generieren, die sich gleichmäßig über den positiven 64‑Bit-Ganzzahlbereich verteilen.
Weitere Informationen zur Auswahl eines Primärschlüssels, um Hotspots zu vermeiden, finden Sie unter Best Practices für Schemadesign.
Migrationsstrategien
Je nach Anwendungsfall und Anforderungen können Sie eine Primärschlüsselmigrationsstrategie implementieren. Jede dieser Migrationsstrategien:
- Prüfen Sie, ob die migrierten Primärschlüssel korrekt sind.
- Minimieren Sie Änderungen an nachgelagerten Anwendungen, z. B. Änderungen an Typen oder Primärschlüsselwerten.
- Best Practices für Leistung und Skalierbarkeit von Spanner implementieren
- Spanner ändert nur die Methode, mit der neue Daten generiert werden, und hat keine Auswirkungen auf vorhandene Daten.
UUID-Schlüsseldatenbanken migrieren
Angenommen, Sie migrieren von einer Datenbank mit UUID-Primärschlüsseln zu Spanner. Konfigurieren Sie vorhandene UUID-Schlüssel als Strings in Ihrer Quelldatenbank und importieren Sie sie unverändert in Spanner. UUID-Werte, insbesondere Version 4, sind unabhängig von ihrer Generierung eindeutig.
Sie können die Funktion GENERATE_UUID()
(GoogleSQL, PostgreSQL) in Spanner verwenden, um UUID-Schlüsseldatenbanken zu migrieren.
Eine Anleitung zum Migrieren von UUID-Schlüsseldatenbanken finden Sie unter UUID-Schlüsselspalten migrieren.
Migration von Datenbankinstanzen mit sequenziellen Schlüsseln
Angenommen, Sie migrieren von einer Datenbank mit einer einzelnen Instanz, die sequenzielle monotone Schlüssel verwendet, z. B.
AUTO_INCREMENT
in MySQL, SERIAL
in PostgreSQL oder den Standardtyp IDENTITY
in SQL Server oder Oracle.
Konfigurieren Sie das Spanner-Objekt SEQUENCE
so, dass die Werte im Bereich vorhandener Schlüssel übersprungen und neue bitweise umgekehrte Schlüssel generiert werden. Von dem Spanner-Objekt SEQUENCE
generierte umgekehrte Binärschlüssel sind immer größer als null und gleichmäßig über den positiven 64‑Bit-Ganzzahlbereich verteilt.
Eine Anleitung zum Migrieren von Datenbanken mit sequenziellen Schlüsseln finden Sie unter Automatisch generierte sequenzielle Primärschlüssel migrieren.
Sequenzielle Schlüsseldatenbanken mit Live-Übergang migrieren
Angenommen, Sie migrieren von einer Datenbank mit einer einzelnen Instanz, die sequenzielle monotone Schlüssel verwendet, zu Spanner und unterstützen Replikationsszenarien, z. B. wenn Sie eine Live-Umstellung zwischen den Datenbanksystemen durchführen möchten.
Konfigurieren Sie das Spanner-Objekt SEQUENCE
so, dass der gesamte Wertebereich vorhandener Schlüssel in Ihrer Quelldatenbank übersprungen und neue bitweise umgekehrte Schlüssel in Spanner generiert werden. Vom Spanner-Objekt SEQUENCE
generierte umgekehrte Binärschlüssel sind immer größer als null, aber nicht sortiert.
Eine Anleitung zum Migrieren von Datenbanken mit Unterstützung für die Live-Umstellung finden Sie unter Spanner und Ihre Quelldatenbank verwenden.
Sequenzielle Schlüsseldatenbanken mit Abhängigkeiten von der Anwendungslogik migrieren
Angenommen, Sie migrieren von einer Datenbank mit sequenziellen monoton steigenden Schlüsseln und die Logik Ihrer Anwendung basiert auf der Reihenfolge der Primärschlüssel, um die Aktualität zu bestimmen oder neu erstellte Daten zu sequenzieren.
Erstellen Sie einen zusammengesetzten Schlüssel, der einen gleichmäßig verteilten Wert, z. B. eine Shard-ID oder einen Hash, als erste Komponente und eine fortlaufende Nummer als zweite Komponente kombiniert. So bleiben die sortierten Schlüsselwerte erhalten, ohne dass es zu einem Hotspot in großem Maßstab kommt.
Eine Anleitung zum Migrieren von Datenbanken mit sequenziellen Schlüsseln mit Abhängigkeiten von der Anwendungslogik finden Sie unter Eigene Primärschlüssel migrieren.
Nächste Schritte
- Detaillierte Migrationsabläufe finden Sie unter Primärschlüssel migrieren.