Migrar un esquema de MySQL (vista general)

En esta página se explica cómo migrar tu esquema de MySQL a un esquema de Spanner. Te recomendamos que uses la herramienta de migración de Spanner para crear un esquema de Spanner a partir de un esquema de MySQL. La herramienta asigna la mayoría de los tipos de datos de MySQL a tipos de Spanner, destaca las opciones y proporciona sugerencias para evitar posibles problemas de migración.

Comparación de tipos de datos

Asigna la siguiente lista de tipos de datos de MySQL a sus equivalentes de Spanner:

Tipo de datos de MySQL Equivalente de Spanner Notas
INTEGER, INT, BIGINT, MEDIUMINT, SMALLINT, TINYINT INT64
TINYINT, BOOL, BOOLEAN, BOOLEAN Los valores TINYINT(1) se usan para representar valores booleanos de "true" (distinto de cero) o "false" (0).
BIT BOOLEAN, INT64
CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT STRING Spanner usa cadenas Unicode UTF8 en todo el sistema y no tiene ordenaciones configurables.
VARCHAR admite una longitud máxima de 65.535 bytes, mientras que Spanner admite hasta 2.621.440 caracteres.
FLOAT FLOAT32
DOUBLE FLOAT64
DECIMAL, NUMERIC NUMERIC En MySQL, los tipos de datos NUMERIC y DECIMAL admiten hasta 65 dígitos de precisión y escala, tal como se define en la declaración de la columna. El tipo de datos NUMERIC de Spanner admite hasta 38 dígitos de precisión y 9 dígitos decimales de escala.
Si necesitas una mayor precisión, consulta el artículo sobre cómo almacenar datos numéricos de precisión arbitraria para ver otros mecanismos.
BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB BYTES Los objetos pequeños (menos de 10 MiB) se pueden almacenar como BYTES. Puedes usar otras Google Cloud ofertas, como Cloud Storage, para almacenar objetos de mayor tamaño.
DATE DATE Tanto Spanner como MySQL usan el formato "yyyy-mm-dd" para las fechas, por lo que no es necesario hacer ninguna transformación. Se proporcionan funciones SQL para convertir fechas en una cadena con formato.
DATETIME, TIMESTAMP TIMESTAMP Spanner almacena la hora independientemente de la zona horaria. Si necesitas almacenar una zona horaria, debes usar una columna STRING independiente. Se proporcionan funciones de SQL para convertir marcas de tiempo en una cadena con formato mediante zonas horarias.
TEXT, TINYTEXT, ENUM STRING Los valores pequeños de TEXT (inferiores a 10 MiB) se pueden almacenar como STRING. Puedes usar otras Google Cloud ofertas como Cloud Storage para admitir valores TEXT más grandes.
ENUM STRING La validación de los valores de ENUM debe realizarse en la aplicación.
SET ARRAY<STRING> La validación de los valores del elemento SET debe realizarse en la aplicación.
LONGBLOB, MEDIUMBLOB BYTES o STRING que contiene el URI del objeto. Los objetos pequeños (menos de 10 MiB) se pueden almacenar como BYTES. Puedes usar otras Google Cloud ofertas, como Cloud Storage, para almacenar objetos de mayor tamaño.
LONGTEXT, MEDIUMTEXT STRING (que contiene datos o un URI a un objeto externo) Los objetos pequeños (menos de 2.621.440 caracteres) se pueden almacenar como STRING. Puedes usar otras Google Cloud ofertas como Cloud Storage para almacenar objetos de mayor tamaño.
JSON JSON Las cadenas JSON pequeñas (menos de 2.621.440 caracteres) se pueden almacenar como JSON. Puedes usar otras Google Cloud ofertas como Cloud Storage para almacenar objetos de mayor tamaño.
GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTIPOLYGON, GEOMETRYCOLLECTION STRING, ARRAY Spanner no admite tipos de datos geoespaciales. Debe almacenar estos datos con tipos de datos estándar e implementar cualquier lógica de búsqueda o filtrado en la aplicación.

En muchos casos, varios tipos de MySQL se asignan a un solo tipo de Spanner. Esto se debe a que MySQL tiene un conjunto de tipos para el mismo concepto que tienen límites de longitud diferentes, mientras que Spanner tiene un tipo general con un límite único relativamente grande.

Ten en cuenta los siguientes ejemplos:

  • MySQL tiene TEXT, TINYTEXT, MEDIUMTEXT y LONGTEXT. En Spanner, hay un solo tipo STRING con un parámetro de longitud de caracteres que se puede definir con cualquier valor de hasta 2.621.440 caracteres.

  • MySQL tiene INTEGER, INT, BIGINT, MEDIUMINT, SMALLINT y TINYINT. Spanner tiene un solo tipo INT64 que almacena valores enteros con signo de 8 bytes. La principal diferencia es que INT64 de Spanner consume más espacio de almacenamiento que MEDIUMINT, SMALLINT y TINYINT. Además, INT64 no captura las limitaciones de intervalo de MEDIUMINT, SMALLINT y TINYINT, aunque se pueden aplicar añadiendo restricciones CHECK.

Spanner no admite tipos geoespaciales. Puedes almacenar valores de estos tipos codificándolos como cadenas, bytes o arrays. Cualquier filtrado, operación y función debe realizarse a nivel de aplicación.

Consultas

Spanner usa el dialecto ANSI 2011 de SQL con extensiones y tiene muchas funciones y operadores para ayudarte a traducir y agregar tus datos. Las consultas de SQL que usen dialectos, funciones y tipos específicos de MySQL deben convertirse para que sean compatibles con Spanner.

Aunque Spanner no admite datos estructurados como definiciones de columnas, puedes usar datos estructurados en consultas de SQL con los tipos ARRAY<> y STRUCT<>. Por ejemplo, puedes escribir una consulta que devuelva todos los álbumes de un artista usando un ARRAY de STRUCTs (aprovechando los datos precombinados). Para obtener más información, consulta la sección Subconsultas de la documentación.

Puedes ejecutar consultas de SQL en la página Spanner Studio de la consola. Google Cloud En general, las consultas que realizan análisis de tabla completa en tablas grandes son muy costosas y deben usarse con moderación. Para obtener más información sobre cómo optimizar las consultas de SQL, consulta la documentación sobre las prácticas recomendadas para SQL.

Procedimientos almacenados y activadores

Spanner no admite la ejecución de código de usuario a nivel de base de datos. Como parte de la migración del esquema, mueve los procedimientos almacenados y los activadores de lógica empresarial que hayas implementado en el nivel de la base de datos MySQL a tu aplicación.

Secuencias

Spanner recomienda usar UUID versión 4 como método predeterminado para generar valores de clave principal. La función GENERATE_UUID() devuelve valores de UUID versión 4 representados como tipo STRING.

Si necesita generar valores enteros, Spanner admite secuencias positivas invertidas por bits, que producen valores que se distribuyen de forma uniforme en el espacio de números positivos de 64 bits. Puedes usar estos números para evitar problemas con la conexión compartida.

Para obtener más información, consulte las estrategias de valor predeterminado de clave principal.

Siguientes pasos