Cette page explique comment migrer votre schéma MySQL vers un schéma Spanner. Nous vous recommandons d'utiliser l'outil de migration Spanner pour créer un schéma Spanner à partir d'un schéma MySQL existant. L'outil mappe la plupart des types de données MySQL aux types Spanner, met en évidence les choix et fournit des suggestions pour éviter les problèmes de migration potentiels.
Comparaison des types de données
Mappez la liste suivante de types de données MySQL à leur équivalent Spanner :
Type de donnée MySQL | Équivalent dans Spanner | Remarques |
---|---|---|
INTEGER ,
INT ,
BIGINT ,
MEDIUMINT ,
SMALLINT ,
TINYINT
|
INT64 |
|
TINYINT ,
BOOL ,
BOOLEAN ,
|
BOOLEAN |
Les valeurs TINYINT(1) représentent les valeurs booléennes "true" (différent de zéro) ou "false" (0). |
BIT
|
BOOLEAN , INT64 |
|
CHAR ,
VARCHAR ,
TINYTEXT ,
TEXT ,
MEDIUMTEXT ,
LONGTEXT
|
STRING |
Spanner utilise des chaînes Unicode UTF8 et ne dispose pas de classements configurables.VARCHAR accepte une longueur maximale de 65 535 octets, tandis que Spanner accepte jusqu'à 2 621 440 caractères.
|
FLOAT |
FLOAT32 |
|
DOUBLE |
FLOAT64 |
|
DECIMAL , NUMERIC |
NUMERIC
|
Dans MySQL, les types de données NUMERIC et DECIMAL acceptent jusqu'à 65 chiffres dans les paramètres de précision et d'échelle, comme défini dans la déclaration de colonne. Le type de données Spanner NUMERIC accepte jusqu'à 38 chiffres dans les paramètres de précision et 9 chiffres décimaux dans les paramètres d'échelle.Si vous avez besoin d'une plus grande précision, consultez la section Stocker des données numériques de précision arbitraire pour découvrir d'autres mécanismes. |
BINARY ,
VARBINARY ,
TINYBLOB ,
BLOB ,
MEDIUMBLOB ,
LONGBLOB
|
BYTES |
Les petits objets (moins de 10 Mio) peuvent être stockés sous forme de BYTES . Pensez à utiliser des offres Google Cloud alternatives, telles que Cloud Storage, pour stocker des objets plus volumineux.
|
DATE |
DATE |
Spanner et MySQL utilisent tous deux le format "yyyy-mm-dd " pour les dates. Aucune transformation n'est donc nécessaire. Les fonctions SQL sont fournies pour convertir les dates en une chaîne formatée.
|
DATETIME , TIMESTAMP |
TIMESTAMP |
Spanner stocke l'heure indépendamment du fuseau horaire. Si vous devez stocker un fuseau horaire, vous devez utiliser une colonne STRING distincte.
Les fonctions SQL permettent de convertir les horodatages en chaînes formatées utilisant les fuseaux horaires. |
TEXT , TINYTEXT , ENUM |
STRING |
Les petites valeurs TEXT (moins de 10 Mio) peuvent être stockées sous forme de STRING . Pensez à utiliser des offres Google Cloud alternatives, telles que Cloud Storage, pour accepter les valeurs TEXT plus importantes.
|
ENUM |
STRING |
La validation des valeurs ENUM doit être effectuée dans l'application. |
SET |
ARRAY<STRING> |
La validation des valeurs des éléments SET doit être effectuée dans l'application. |
LONGBLOB , MEDIUMBLOB |
BYTES ou STRING contenant l'URI vers l'objet
|
Les petits objets (moins de 10 Mio) peuvent être stockés sous forme de BYTES .
Pensez à utiliser des offres Google Cloud alternatives, telles que Cloud Storage, pour stocker des objets plus volumineux.
|
LONGTEXT , MEDIUMTEXT |
STRING (contenant des données ou un URI pour un objet externe) |
Les petits objets (moins de 2 621 440 caractères) peuvent être stockés sous forme de STRING . Pensez à utiliser des offres Google Cloud alternatives, telles que Cloud Storage, pour stocker des objets plus volumineux.
|
JSON |
JSON
|
Les petites chaînes JSON (moins de 2 621 440 caractères) peuvent être stockées sous forme de JSON . Pensez à utiliser des offres Google Cloud alternatives, telles que Cloud Storage, pour stocker des objets plus volumineux.
|
GEOMETRY ,
POINT ,
LINESTRING ,
POLYGON ,
MULTIPOINT ,
MULTIPOLYGON ,
GEOMETRYCOLLECTION
|
STRING ,
ARRAY
|
Spanner n'accepte pas les données de type géospatial. Vous devez stocker ces données à l'aide de types de données standards et mettre en œuvre une logique de recherche ou de filtrage dans l'application. |
Dans de nombreux cas, plusieurs types MySQL sont mappés à un seul type Spanner. En effet, MySQL dispose d'un ensemble de types pour le même concept, avec des limites de longueur différentes. Spanner, quant à lui, dispose d'un type global avec une limite unique relativement élevée.
Prenons les exemples suivants :
MySQL dispose de
TEXT
,TINYTEXT
,MEDIUMTEXT
etLONGTEXT
. Dans Spanner, il existe un seul typeSTRING
avec un paramètre de longueur de caractère qui peut être défini sur n'importe quelle valeur jusqu'à 2 621 440 caractères.MySQL dispose de
INTEGER
,INT
,BIGINT
,MEDIUMINT
,SMALLINT
etTINYINT
. Spanner dispose d'un seul typeINT64
qui stocke des valeurs entières signées de 8 octets. La principale différence est que le typeINT64
de Spanner consomme plus d'espace de stockage queMEDIUMINT
,SMALLINT
etTINYINT
. De plus,INT64
ne capture pas les limites de plage deMEDIUMINT
,SMALLINT
etTINYINT
, bien que celles-ci puissent être appliquées en ajoutant des contraintesCHECK
.
Spanner n'accepte pas les types géospatiaux. Vous pouvez stocker les valeurs de ces types en les encodant sous forme de chaînes, d'octets ou de tableaux. Tous les filtrages, opérations et fonctions doivent être effectués au niveau de l'application.
Requêtes
Spanner utilise le dialecte SQL ANSI 2011 avec extensions et dispose de nombreux opérateurs et fonctions pour vous permettre de traduire et d'agréger vos données. Toutes les requêtes SQL utilisant un dialecte, des fonctions et des types spécifiques à MySQL doivent être converties pour être compatibles avec Spanner.
Même si Cloud Spanner n'accepte pas les données structurées en tant que définitions de colonne, vous pouvez utiliser des données structurées dans les requêtes SQL à l'aide des types ARRAY<>
et STRUCT<>
. Par exemple, vous pouvez écrire une requête qui renvoie tous les albums d'un artiste à l'aide d'un ARRAY
de STRUCT
(en tirant parti des données préjointes). Consultez la section Sous-requêtes de la documentation pour en savoir plus.
Vous pouvez exécuter des requêtes SQL sur la page Spanner Studio de la console Google Cloud . En général, les requêtes qui effectuent des analyses complètes de tables sur des tables volumineuses sont très coûteuses et doivent être utilisées avec parcimonie. Pour en savoir plus sur l'optimisation des requêtes SQL, consultez la documentation relative aux bonnes pratiques SQL.
Procédures et déclencheurs stockés
Spanner n'est pas compatible avec l'exécution de code utilisateur au niveau de la base de données. Dans le cadre de la migration du schéma, déplacez les procédures stockées et les déclencheurs de logique métier que vous avez implémentés au niveau de la base de données MySQL dans votre application.
Séquences
Spanner recommande d'utiliser la version 4 de l'UUID comme méthode par défaut pour générer des valeurs de clé primaire. La fonction GENERATE_UUID()
renvoie des valeurs UUID de version 4 représentées sous la forme d'un type STRING
.
Si vous devez générer des valeurs entières, Spanner accepte les séquences positives inversées par bit, qui produisent des valeurs réparties de manière uniforme dans l'espace de nombres positifs de 64 bits. Vous pouvez utiliser ces chiffres pour éviter les problèmes de hotspot.
Pour en savoir plus, consultez Stratégies de valeur par défaut de clé primaire.