Schema aus MySQL migrieren – Übersicht

Auf dieser Seite wird beschrieben, wie Sie Ihr MySQL-Schema in ein Spanner-Schema migrieren. Wir empfehlen die Verwendung des Spanner-Migrationstools zum Erstellen eines Spanner-Schemas aus einem vorhandenen MySQL-Schema. Das Tool ordnet die meisten MySQL-Datentypen Spanner-Typen zu, weist auf Auswahlmöglichkeiten hin und gibt Vorschläge, um potenzielle Migrationsprobleme zu vermeiden.

Vergleich von Datentypen

Ordnen Sie die folgende Liste von MySQL-Datentypen ihren Spanner-Entsprechungen zu:

MySQL-Datentyp Entsprechung für Spanner Hinweise
INTEGER, INT, BIGINT, MEDIUMINT, SMALLINT, TINYINT INT64
TINYINT, BOOL, BOOLEAN, BOOLEAN TINYINT(1)-Werte werden zur Darstellung der booleschen Werte „true“ (ungleich null) oder „false“ (0) verwendet.
BIT BOOLEAN, INT64
CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT STRING Spanner verwendet durchgehend Unicode-UTF8-Strings und hat keine konfigurierbaren Sortierungen.
VARCHAR unterstützt eine maximale Länge von 65.535 Byte, Spanner hingegen bis zu 2.621.440 Zeichen.
FLOAT FLOAT32
DOUBLE FLOAT64
DECIMAL, NUMERIC NUMERIC In MySQL unterstützen die Datentypen NUMERIC und DECIMAL insgesamt bis zu einer Gesamtgenauigkeit und Skalierung von 65 Ziffern, wie in der Spaltendeklaration definiert. Der Spanner-Datentyp NUMERIC unterstützt eine Genauigkeit von bis zu 38 Stellen und eine Skalierung mit 9 Dezimalstellen.
Wenn Sie eine höhere Genauigkeit benötigen, finden Sie unter Numerische Daten mit beliebiger Genauigkeit speichern alternative Mechanismen.
BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB BYTES Kleine Objekte (kleiner als 10 MiB) können als BYTES gespeichert werden. Zum Speichern größerer Objekte werden alternative Google Cloud -Lösungen wie Cloud Storage empfohlen.
DATE DATE Sowohl Spanner als auch MySQL verwenden das Datumsformat yyyy-mm-dd, sodass keine Transformation erforderlich ist. Es werden SQL-Funktionen bereitgestellt, um Datumsangaben in einen formatierten String zu konvertieren.
DATETIME, TIMESTAMP TIMESTAMP Spanner speichert die Uhrzeit unabhängig von der Zeitzone. Zur Speicherung einer Zeitzone müssen Sie eine separate STRING-Spalte verwenden. Es werden SQL-Funktionen bereitgestellt, um Zeitstempel in einen formatierten String zu konvertieren.
TEXT, TINYTEXT, ENUM STRING Kleine TEXT-Werte (kleiner als 10 MiB) können als STRING gespeichert werden. Erwägen Sie die Verwendung alternativer Google Cloud Angebote wie Cloud Storage, um größere TEXT-Werte zu unterstützen.
ENUM STRING Die Validierung der ENUM-Werte muss in der Anwendung durchgeführt werden.
SET ARRAY<STRING> Die Validierung der SET-Elementwerte muss in der Anwendung durchgeführt werden.
LONGBLOB, MEDIUMBLOB BYTES oder STRING mit URI zum Objekt. Kleine Objekte (kleiner als 10 MiB) können als BYTES gespeichert werden. Zum Speichern größerer Objekte werden alternative Google Cloud -Lösungen wie Cloud Storage empfohlen.
LONGTEXT, MEDIUMTEXT STRING (entweder mit Daten oder URI zum externen Objekt) Kleine Objekte (weniger als 2.621.440 Zeichen) können als STRING gespeichert werden. Zum Speichern größerer Objekte werden alternative Google Cloud Lösungen wie Cloud Storage empfohlen.
JSON JSON Kleine JSON-Strings (weniger als 2.621.440 Zeichen) können als JSON gespeichert werden. Zum Speichern größerer Objekte werden alternative Google Cloud Lösungen wie Cloud Storage empfohlen.
GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTIPOLYGON, GEOMETRYCOLLECTION STRING, ARRAY Geospatiale Datentypen werden von Spanner nicht unterstützt. Sie müssen diese Daten mit Standarddatentypen speichern und Such- oder Filterlogik in der Anwendung implementieren.

In vielen Fällen werden mehrere MySQL-Typen einem einzelnen Spanner-Typ zugeordnet. Das liegt daran, dass MySQL eine Reihe von Typen für dasselbe Konzept mit unterschiedlichen Längenbeschränkungen hat, während es in Spanner einen Gesamttyp mit einer einzigen, relativ großen Beschränkung gibt.

Betrachten Sie hierzu folgende Beispiele:

  • MySQL hat TEXT, TINYTEXT, MEDIUMTEXT, LONGTEXT. In Spanner gibt es nur den Typ STRING mit einem Parameter für die Zeichenlänge, der auf einen beliebigen Wert bis zu 2.621.440 Zeichen festgelegt werden kann.

  • MySQL hat INTEGER, INT, BIGINT, MEDIUMINT, SMALLINT und TINYINT. Spanner hat einen einzelnen Typ INT64, in dem 8‑Byte-Ganzzahlwerte mit Vorzeichen gespeichert werden. Der Hauptunterschied besteht darin, dass INT64 in Spanner mehr Speicherplatz als MEDIUMINT, SMALLINT und TINYINT belegt. Außerdem werden die Bereichsbeschränkungen von MEDIUMINT, SMALLINT und TINYINT in INT64 nicht berücksichtigt. Sie können jedoch durch Hinzufügen von CHECK-Einschränkungen erzwungen werden.

Geospatiale Typen werden von Spanner nicht unterstützt. Sie können Werte dieser Typen speichern, indem Sie sie als Strings, Byte oder Arrays codieren. Alle Filter-, Operations- und Funktionsvorgänge müssen auf Anwendungsebene ausgeführt werden.

Abfragen

Spanner verwendet den ANSI 2011-Dialekt von SQL mit Erweiterungen und bietet viele Funktionen und Operatoren zum Übersetzen und Zusammenfassen von Daten. Alle SQL-Abfragen, die MySQL-spezifische Dialekte, Funktionen und Typen verwenden, müssen konvertiert werden, damit sie mit Spanner kompatibel sind.

Obwohl Spanner keine strukturierten Daten als Spaltendefinitionen unterstützt, können Sie mit den Typen ARRAY<> und STRUCT<> strukturierte Daten in SQL-Abfragen verwenden. Sie können beispielsweise eine Abfrage schreiben, die ein ARRAY von STRUCTs verwendet und alle Alben eines Interpreten ausgibt. Hierbei werden die vorab verknüpften Daten genutzt. Weitere Informationen finden Sie im Abschnitt Unterabfragen der Dokumentation.

Sie können SQL-Abfragen auf der Spanner Studio-Seite in der Google Cloud Console ausführen. Im Allgemeinen sollten Abfragen, die vollständige Tabellenscans für große Tabellen ausführen, sparsam verwendet werden, da sie sehr teuer sind. Weitere Informationen zur Optimierung von SQL-Abfragen finden Sie in der Dokumentation zu Best Practices für SQL.

Gespeicherte Prozeduren und Trigger

Spanner unterstützt nicht die Ausführung von Nutzercode auf Datenbankebene. Verschieben Sie im Rahmen der Schemamigration die gespeicherten Prozeduren und Trigger für die Geschäftslogik, die Sie auf MySQL-Datenbankebene implementiert haben, in Ihre Anwendung.

Sequenzen

Spanner empfiehlt, UUID Version 4 als Standardmethode zum Generieren von Primärschlüsselwerten zu verwenden. Die Funktion GENERATE_UUID() gibt UUID-Werte der Version 4 zurück, die als STRING-Typ dargestellt werden.

Wenn Sie Ganzzahlwerte generieren müssen, unterstützt Spanner bit-reversed positive sequences (bitweise umgekehrte positive Sequenzen), die Werte erzeugen, die gleichmäßig über den positiven 64-Bit-Zahlenbereich verteilt sind. Anhand dieser Zahlen können Sie Probleme mit Hotspots vermeiden.

Weitere Informationen finden Sie unter Strategien für Standardwerte für Primärschlüssel.

Nächste Schritte