Migre um esquema do MySQL

Esta página mostra como migrar o seu esquema do MySQL para o esquema do Spanner. Recomendamos a utilização da ferramenta de migração do Spanner para criar um esquema do Spanner a partir de um esquema do MySQL existente. A ferramenta mapeia a maioria dos tipos de dados do MySQL para tipos do Spanner, realça as opções e fornece sugestões para evitar potenciais problemas de migração.

Comparação de tipos de dados

Mapeie a seguinte lista de tipos de dados do MySQL para os respetivos equivalentes do Spanner:

Tipo de dados do MySQL Equivalente do Spanner Notas
INTEGER, INT, BIGINT, MEDIUMINT, SMALLINT, TINYINT INT64
TINYINT, BOOL, BOOLEAN, BOOLEAN Os valores TINYINT(1) são usados para representar valores booleanos de "verdadeiro" (diferente de zero) ou "falso" (0).
BIT BOOLEAN, INT64
CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT STRING O Spanner usa strings UTF8 Unicode em todo o lado e não tem ordenações configuráveis.
VARCHAR suporta um comprimento máximo de 65 535 bytes, enquanto o Spanner suporta até 2 621 440 carateres.
FLOAT FLOAT32
DOUBLE FLOAT64
DECIMAL, NUMERIC NUMERIC No MySQL, os tipos de dados NUMERIC e DECIMAL suportam 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 suporta até 38 dígitos de precisão e 9 dígitos decimais de escala.
Se precisar de maior precisão, consulte Armazene dados numéricos de precisão arbitrária para mecanismos alternativos.
BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB BYTES Os objetos pequenos (inferiores a 10 MiB) podem ser armazenados como BYTES. Considere usar ofertas Google Cloud alternativas, como o Cloud Storage, para armazenar objetos maiores.
DATE DATE O Spanner e o MySQL usam o formato "yyyy-mm-dd" para datas, pelo que não é necessária nenhuma transformação. As funções SQL são fornecidas para converter datas numa string formatada.
DATETIME, TIMESTAMP TIMESTAMP O Spanner armazena a hora independentemente do fuso horário. Se precisar de armazenar um fuso horário, tem de usar uma coluna STRING separada. São fornecidas funções SQL para converter datas/horas numa string formatada através de fusos horários.
TEXT, TINYTEXT, ENUM STRING Os valores pequenos de TEXT (inferiores a 10 MiB) podem ser armazenados como STRING. Considere usar Google Cloud ofertas alternativas, como o armazenamento na nuvem, para suportar valores TEXT maiores.
ENUM STRING A validação dos valores ENUM tem de ser realizada na aplicação.
SET ARRAY<STRING> A validação dos valores dos elementos SET tem de ser realizada na aplicação.
LONGBLOB, MEDIUMBLOB BYTES ou STRING que contém o URI para o objeto. Os objetos pequenos (inferiores a 10 MiB) podem ser armazenados como BYTES. Considere usar ofertas Google Cloud alternativas, como o Cloud Storage, para armazenar objetos maiores.
LONGTEXT, MEDIUMTEXT STRING (contendo dados ou URI para objeto externo) Os objetos pequenos (com menos de 2 621 440 carateres) podem ser armazenados como STRING. Considere usar Google Cloud ofertas alternativas, como o Cloud Storage, para armazenar objetos maiores.
JSON JSON As strings JSON pequenas (com menos de 2 621 440 carateres) podem ser armazenadas como JSON. Considere usar Google Cloud ofertas alternativas, como o Cloud Storage, para armazenar objetos maiores.
GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTIPOLYGON, GEOMETRYCOLLECTION STRING, ARRAY O Spanner não suporta tipos de dados geoespaciais. Tem de armazenar estes dados com tipos de dados padrão e implementar qualquer lógica de pesquisa ou filtragem na aplicação.

Em muitos casos, vários tipos do MySQL são mapeados para um único tipo do Spanner. Isto deve-se ao facto de o MySQL ter um conjunto de tipos para o mesmo conceito com limites de comprimento diferentes e, no Spanner, existir um tipo geral com um limite único relativamente grande.

Considere os seguintes exemplos:

  • O MySQL tem TEXT, TINYTEXT, MEDIUMTEXT e LONGTEXT. No Spanner, existe um único tipo STRING com um parâmetro de comprimento de carateres que pode ser definido para qualquer valor até 2 621 440 carateres.

  • O MySQL tem INTEGER, INT, BIGINT, MEDIUMINT, SMALLINT e TINYINT. O Spanner tem um único tipo INT64 que armazena valores inteiros assinados de 8 bytes. A principal diferença é que o Spanner INT64 consome mais armazenamento do que o MEDIUMINT, o SMALLINT e o TINYINT. Além disso, INT64 não capta as limitações de intervalo de MEDIUMINT, SMALLINT e TINYINT, embora estas possam ser aplicadas adicionando restrições CHECK.

O Spanner não suporta tipos geoespaciais. Pode armazenar valores destes tipos codificando-os como strings, bytes ou matrizes. Qualquer filtragem, operações e funções têm de ser realizadas ao nível da aplicação.

Consultas

O Spanner usa o dialeto ANSI 2011 de SQL com extensões e tem muitas funções e operadores para ajudar a traduzir e agregar os seus dados. Todas as consultas SQL que usam o dialeto, as funções e os tipos específicos do MySQL têm de ser convertidas para serem compatíveis com o Spanner.

Embora o Spanner não suporte dados estruturados como definições de colunas, pode usar dados estruturados em consultas SQL com os tipos ARRAY<> e STRUCT<>. Por exemplo, pode escrever uma consulta que devolva todos os álbuns de um artista usando um ARRAY de STRUCTs (tirando partido dos dados pré-associados). Para mais informações, consulte a secção Subconsultas da documentação.

Pode executar consultas SQL na página do Spanner Studio na Google Cloud consola. Em geral, as consultas que efetuam análises completas de tabelas grandes são muito dispendiosas e devem ser usadas com moderação. Para mais informações sobre a otimização de consultas SQL, consulte a documentação sobre as práticas recomendadas de SQL.

Procedimentos armazenados e acionadores

O Spanner não suporta a execução de código do utilizador ao nível da base de dados. Como parte da migração do esquema, mova os procedimentos armazenados e os acionadores de lógica empresarial que implementou ao nível da base de dados MySQL para a sua aplicação.

Sequências

O Spanner recomenda a utilização da versão 4 do UUID como o método predefinido para gerar valores de chaves primárias. A função GENERATE_UUID() devolve valores da versão 4 do UUID representados como tipo STRING.

Se precisar de gerar valores inteiros, o Spanner suporta sequências positivas invertidas em bits, que produzem valores distribuídos uniformemente no espaço de números positivos de 64 bits. Pode usar estes números para evitar problemas de pontos críticos.

Para mais informações, consulte as estratégias de valor predefinido da chave principal.

O que se segue?