Nesta página, mostramos como migrar seu esquema do MySQL para o esquema do Spanner. Recomendamos usar a ferramenta de migração do Spanner para criar um esquema do Spanner com base em um esquema do MySQL. A ferramenta mapeia a maioria dos tipos de dados do MySQL para tipos do Spanner, destaca opções e oferece sugestões para evitar possíveis problemas de migração.
Comparação de tipos de dados
Mapeie a lista a seguir de tipos de dados do MySQL para o equivalente do Spanner:
Tipo de dados do MySQL | Equivalente do Spanner | Observações |
---|---|---|
INTEGER ,
INT ,
BIGINT ,
MEDIUMINT ,
SMALLINT ,
TINYINT
|
INT64 |
|
TINYINT ,
BOOL ,
BOOLEAN ,
|
BOOLEAN |
Os valores TINYINT(1) são usados para representar valores booleanos de
"true" (diferente de zero) ou "false" (0). |
BIT
|
BOOLEAN , INT64 |
|
CHAR ,
VARCHAR ,
TINYTEXT ,
TEXT ,
MEDIUMTEXT ,
LONGTEXT
|
STRING |
O Spanner usa strings Unicode UTF8 em todo o sistema e não tem agrupamentos configuráveis. O VARCHAR aceita um comprimento máximo de 65.535 bytes, enquanto o
Spanner aceita até 2.621.440 caracteres.
|
FLOAT |
FLOAT32 |
|
DOUBLE |
FLOAT64 |
|
DECIMAL , NUMERIC |
NUMERIC
|
No MySQL, os tipos de dados NUMERIC e DECIMAL aceitam
até um total de 65 dígitos de precisão e escala, conforme definido na declaração da
coluna. O tipo de dados NUMERIC do Spanner
aceita até 38 dígitos de precisão e 9 dígitos decimais de escala.Se você precisar de mais precisão, consulte Armazenar dados numéricos de precisão arbitrária para mecanismos alternativos. |
BINARY ,
VARBINARY ,
TINYBLOB ,
BLOB ,
MEDIUMBLOB ,
LONGBLOB
|
BYTES |
Objetos pequenos (menos de 10 MiB) podem ser armazenados como
BYTES . Considere usar ofertas alternativas Google Cloud , como o Cloud Storage, para armazenar objetos maiores.
|
DATE |
DATE |
Tanto o Spanner quanto o MySQL usam o formato "yyyy-mm-dd " para datas. Portanto, nenhuma transformação é necessária. Funções SQL são fornecidas para converter datas em uma string formatada.
|
DATETIME , TIMESTAMP |
TIMESTAMP |
O Spanner armazena o horário independentemente do fuso horário. Se você precisar armazenar um fuso horário, deverá usar uma coluna STRING separada.
As funções SQL são fornecidas para converter carimbos de data/hora em uma string formatada, usando fusos horários. |
TEXT , TINYTEXT , ENUM |
STRING |
Valores pequenos de TEXT (menos de 10 MiB) podem ser armazenados como
STRING . Considere usar ofertas alternativas Google Cloud , como o Cloud Storage, para oferecer suporte a valores de TEXT maiores.
|
ENUM |
STRING |
A validação dos valores ENUM precisa ser executada no aplicativo. |
SET |
ARRAY<STRING> |
A validação dos valores do elemento SET precisa ser executada no aplicativo. |
LONGBLOB , MEDIUMBLOB |
BYTES ou STRING contendo o URI para o objeto.
|
Objetos pequenos (menos de 10 MiB) podem ser armazenados como BYTES .
Considere usar ofertas alternativas Google Cloud , como o Cloud Storage, para armazenar objetos maiores.
|
LONGTEXT , MEDIUMTEXT |
STRING (contendo dados ou o URI do objeto externo)
|
Objetos pequenos (menos de 2.621.440 caracteres) podem ser armazenados como
STRING . Considere usar ofertas alternativas Google Cloud , como o Cloud Storage, para armazenar objetos maiores.
|
JSON |
JSON
|
Strings JSON pequenas (menos de 2.621.440 caracteres) podem ser armazenadas como
JSON . Considere usar ofertas alternativas Google Cloud , como o Cloud Storage, para armazenar objetos maiores.
|
GEOMETRY ,
POINT ,
LINESTRING ,
POLYGON ,
MULTIPOINT ,
MULTIPOLYGON ,
GEOMETRYCOLLECTION
|
STRING ,
ARRAY
|
O Spanner não é compatível com tipos de dados geoespaciais. É preciso armazenar esses dados usando tipos de dados padrão e implementar alguma lógica de pesquisa ou filtragem no aplicativo. |
Em muitos casos, vários tipos do MySQL são mapeados para um único tipo do Spanner. Isso ocorre porque o MySQL tem um conjunto de tipos para o mesmo conceito com limites de comprimento diferentes, e no Spanner há um tipo geral com um limite único e relativamente grande.
Veja estes exemplos:
O MySQL tem
TEXT
,TINYTEXT
,MEDIUMTEXT
,LONGTEXT
. No Spanner, há um único tipoSTRING
com um parâmetro de comprimento de caractere que pode ser definido como qualquer valor de até 2.621.440 caracteres.O MySQL tem
INTEGER
,INT
,BIGINT
,MEDIUMINT
,SMALLINT
eTINYINT
. O Spanner tem um único tipoINT64
que armazena valores inteiros de 8 bytes com sinal. A principal diferença é que oINT64
do Spanner consome mais armazenamento do queMEDIUMINT
,SMALLINT
eTINYINT
. Além disso,INT64
não captura as limitações de intervalo deMEDIUMINT
,SMALLINT
eTINYINT
, embora seja possível aplicar essas limitações adicionando restrições deCHECK
.
O Spanner não é compatível com tipos geoespaciais. É possível armazenar valores desses tipos codificando-os como strings, bytes ou matrizes. Todas as filtragens, operações e funções precisam ser realizadas no nível do aplicativo.
Consultas
O Spanner usa o dialeto ANSI 2011 do SQL com extensões e tem muitas funções e operadores para ajudar a converter e agregar seus dados. Todas as consultas SQL que usam o dialeto, as funções e os tipos específicos do MySQL precisam ser convertidas para serem compatíveis com o Spanner.
Embora o Spanner não seja compatível com dados estruturados como definições de coluna, é possível usar dados estruturados em consultas SQL usando os tipos ARRAY<>
e STRUCT<>
. Por exemplo, escreva uma consulta que retorne todos os álbuns de um artista usando um ARRAY
de STRUCT
s (aproveitando os dados pré-mesclados). Para mais informações, consulte a seção Subconsultas da documentação.
É possível executar consultas SQL na página do Spanner Studio no console Google Cloud . Em geral, as consultas que executam varreduras de tabela completas em tabelas grandes são muito caras e devem ser usadas com moderação. Para mais informações sobre otimização de consultas SQL, consulte a documentação de práticas recomendadas de SQL.
Acionadores e procedimentos armazenados
O Spanner não é compatível com a execução de código do usuário no nível do banco de dados. Como parte da migração de esquema, mova os procedimentos armazenados e os acionadores de lógica de negócios implementados no nível do banco de dados MySQL para o aplicativo.
Sequências
O Spanner recomenda usar o UUID versão 4 como o método padrão para gerar valores de chave primária. A função GENERATE_UUID()
retorna valores da versão 4 do UUID representados como tipo STRING
.
Se você precisar gerar valores inteiros, o Spanner vai oferecer suporte a sequências positivas com bits invertidos, que produzem valores distribuídos uniformemente no espaço de números positivos de 64 bits. Você pode usar esses números para evitar problemas de hot spot.
Para mais informações, consulte estratégias de valor padrão de chave primária.