Panoramica della migrazione dello schema da MySQL

Questa pagina mostra come eseguire la migrazione dello schema MySQL allo schema Spanner. Ti consigliamo di utilizzare lo strumento di migrazione di Spanner per creare uno schema Spanner da uno schema MySQL esistente. Lo strumento mappa la maggior parte dei tipi di dati MySQL con i tipi Spanner, evidenzia le scelte e fornisce suggerimenti per evitare potenziali problemi di migrazione.

Confronto dei tipi di dati

Mappa il seguente elenco di tipi di dati MySQL ai rispettivi equivalenti Spanner:

Tipo di dati MySQL Equivalente Spanner Note
INTEGER, INT, BIGINT, MEDIUMINT, SMALLINT, TINYINT INT64
TINYINT, BOOL, BOOLEAN, BOOLEAN I valori TINYINT(1) vengono utilizzati per rappresentare i valori booleani di "true" (diverso da zero) o "false" (0).
BIT BOOLEAN, INT64
CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT STRING Spanner utilizza stringhe Unicode UTF8 e non dispone di regole di confronto configurabili.
VARCHAR supporta una lunghezza massima di 65.535 byte, mentre Spanner supporta fino a 2.621.440 caratteri.
FLOAT FLOAT32
DOUBLE FLOAT64
DECIMAL, NUMERIC NUMERIC In MySQL, i tipi di dati NUMERIC e DECIMAL supportano fino a un totale di 65 cifre di precisione e scalabilità, come definito nella dichiarazione della colonna. Il tipo di dati NUMERIC di Spanner supporta fino a 38 cifre di precisione e 9 cifre decimali di scalabilità.
Se hai bisogno di una maggiore precisione, consulta Memorizzare dati numerici di precisione arbitraria per meccanismi alternativi.
BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB BYTES Gli oggetti di piccole dimensioni (meno di 10 MiB) possono essere archiviati come BYTES. Prendi in considerazione l'utilizzo di offerte Google Cloud alternative come Cloud Storage per archiviare oggetti più grandi.
DATE DATE Sia Spanner che MySQL utilizzano il formato "yyyy-mm-dd" per le date, quindi non è necessaria alcuna trasformazione. Vengono fornite funzioni SQL per convertire le date in una stringa formattata.
DATETIME, TIMESTAMP TIMESTAMP Spanner memorizza l'ora indipendentemente dal fuso orario. Se devi memorizzare un fuso orario, devi utilizzare una colonna STRING separata. Vengono fornite funzioni SQL per convertire i timestamp in una stringa formattata utilizzando i fusi orari.
TEXT, TINYTEXT, ENUM STRING I valori TEXT piccoli (inferiori a 10 MiB) possono essere archiviati come STRING. Valuta la possibilità di utilizzare offerte Google Cloud alternative come Cloud Storage per supportare valori TEXT più grandi.
ENUM STRING La convalida dei valori di ENUM deve essere eseguita nell'applicazione.
SET ARRAY<STRING> La convalida dei valori degli elementi SET deve essere eseguita nell'applicazione.
LONGBLOB, MEDIUMBLOB BYTES o STRING contenente l'URI dell'oggetto. Gli oggetti di piccole dimensioni (meno di 10 MiB) possono essere archiviati come BYTES. Prendi in considerazione l'utilizzo di offerte Google Cloud alternative come Cloud Storage per archiviare oggetti più grandi.
LONGTEXT, MEDIUMTEXT STRING (contenente dati o URI all'oggetto esterno) Gli oggetti di piccole dimensioni (meno di 2.621.440 caratteri) possono essere archiviati come STRING. Prendi in considerazione l'utilizzo di offerte Google Cloud alternative come Cloud Storage per archiviare oggetti più grandi.
JSON JSON Le stringhe JSON di piccole dimensioni (meno di 2.621.440 caratteri) possono essere archiviate come JSON. Prendi in considerazione l'utilizzo di offerte Google Cloud alternative come Cloud Storage per archiviare oggetti più grandi.
GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTIPOLYGON, GEOMETRYCOLLECTION STRING, ARRAY Spanner non supporta i tipi di dati geospaziali. Devi archiviare questi dati utilizzando tipi di dati standard e implementare qualsiasi logica di ricerca o filtro nell'applicazione.

In molti casi, più tipi MySQL vengono mappati in un unico tipo Spanner. Questo perché MySQL ha un insieme di tipi per lo stesso concetto che hanno limiti di lunghezza diversi, mentre in Spanner esiste un tipo complessivo che ha un limite singolo e relativamente grande.

Considera i seguenti esempi:

  • MySQL ha TEXT, TINYTEXT, MEDIUMTEXT, LONGTEXT. In Spanner esiste un solo tipo STRING con un parametro di lunghezza dei caratteri che può essere impostato su qualsiasi valore fino a 2.621.440 caratteri.

  • MySQL ha INTEGER, INT, BIGINT, MEDIUMINT, SMALLINT e TINYINT. Spanner ha un unico tipo INT64 che memorizza valori interi con segno a 8 byte. La differenza principale è che INT64 di Spanner consuma più spazio di archiviazione rispetto a MEDIUMINT, SMALLINT e TINYINT. Inoltre, INT64 non acquisisce le limitazioni di intervallo di MEDIUMINT, SMALLINT e TINYINT, anche se queste possono essere applicate aggiungendo vincoli CHECK.

Spanner non supporta i tipi geospaziali. Puoi archiviare i valori di questi tipi codificandoli come stringhe, byte o array. Qualsiasi filtro, operazione e funzione deve essere eseguito a livello di applicazione.

Query

Spanner utilizza il dialetto ANSI 2011 di SQL con estensioni e dispone di molte funzioni e operatori per facilitare la traduzione e l'aggregazione dei dati. Qualsiasi query SQL che utilizza dialetti, funzioni e tipi specifici di MySQL deve essere convertita per essere compatibile con Spanner.

Sebbene Spanner non supporti i dati strutturati come definizioni di colonne, puoi utilizzare i dati strutturati nelle query SQL utilizzando i tipi ARRAY<> e STRUCT<>. Ad esempio, puoi scrivere una query che restituisce tutti gli album di un artista utilizzando un ARRAY di STRUCT (sfruttando i dati pre-uniti). Per saperne di più, consulta la sezione Subquery della documentazione.

Puoi eseguire query SQL nella pagina Spanner Studio della console Google Cloud . In generale, le query che eseguono scansioni complete delle tabelle di grandi dimensioni sono molto costose e devono essere utilizzate con parsimonia. Per saperne di più sull'ottimizzazione delle query SQL, consulta la documentazione sulle best practice per SQL.

Stored procedure e trigger

Spanner non supporta l'esecuzione del codice utente a livello di database. Nell'ambito della migrazione dello schema, sposta le stored procedure e i trigger della logica di business che hai implementato a livello di database MySQL nella tua applicazione.

Sequenze

Spanner consiglia di utilizzare UUID versione 4 come metodo predefinito per generare i valori della chiave primaria. La funzione GENERATE_UUID() restituisce valori UUID versione 4 rappresentati come tipo STRING.

Se devi generare valori interi, Spanner supporta sequenze positive con inversione dei bit, che producono valori distribuiti in modo uniforme nello spazio numerico positivo a 64 bit. Puoi utilizzare questi numeri per evitare problemi di hotspot.

Per ulteriori informazioni, consulta le strategie per i valori predefiniti delle chiavi primarie.

Passaggi successivi