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 tipoSTRING
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
eTINYINT
. Spanner ha un unico tipoINT64
che memorizza valori interi con segno a 8 byte. La differenza principale è cheINT64
di Spanner consuma più spazio di archiviazione rispetto aMEDIUMINT
,SMALLINT
eTINYINT
. Inoltre,INT64
non acquisisce le limitazioni di intervallo diMEDIUMINT
,SMALLINT
eTINYINT
, anche se queste possono essere applicate aggiungendo vincoliCHECK
.
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.