Migrer d'Apache Cassandra vers Bigtable

Ce document vous guide tout au long du processus de migration des données d'Apache Cassandra vers Bigtable avec un minimum d'interruptions. Elle explique comment utiliser des outils Open Source, tels que l'adaptateur de proxy Cassandra vers Bigtable ou le client Cassandra vers Bigtable pour Java, afin d'effectuer la migration. Avant de commencer, assurez-vous de maîtriser Bigtable pour les utilisateurs de Cassandra.

Adaptateur de proxy Cassandra vers Bigtable

L'adaptateur de proxy Cassandra vers Bigtable vous permet de connecter des applications basées sur Cassandra à Bigtable. L'adaptateur de proxy fonctionne comme une interface Cassandra compatible avec les câbles et permet à votre application d'interagir avec Bigtable à l'aide de Cassandra Query Language (CQL). L'utilisation de l'adaptateur de proxy ne nécessite pas de modifier les pilotes Cassandra, et les ajustements de configuration sont minimes.

Pour configurer l'adaptateur de proxy, consultez Adaptateur de proxy Cassandra vers Bigtable.

Pour savoir quelles versions de Cassandra sont compatibles avec l'adaptateur de proxy, consultez Versions de Cassandra compatibles.

Espace de clés Cassandra

Un espace de clés Cassandra stocke vos tables et gère les ressources de la même manière qu'une instance Bigtable. L'adaptateur de proxy Cassandra vers Bigtable gère la dénomination des espaces de clés de manière transparente, ce qui vous permet d'effectuer des requêtes à l'aide des mêmes espaces de clés. Toutefois, vous devez créer une instance Bigtable pour regrouper logiquement vos tables. Vous devez également configurer la réplication Bigtable séparément.

Types de données acceptés

Le tableau suivant montre comment les types de données Cassandra CQL compatibles sont mappés à leurs équivalents Bigtable.

Type de CQL Mappage Bigtable
text RAW BYTES
blob RAW BYTES
timestamp RAW BYTES
int RAW BYTES
bigint RAW BYTES
float RAW BYTES
double RAW BYTES
boolean RAW BYTES
MAP<key, value> Le nom de la colonne dans Cassandra est utilisé comme nom de la famille de colonnes dans Bigtable. Le key de la carte est utilisé comme qualificatif de colonne, et le value de la carte est stocké comme valeur de cellule.
SET<item> Le nom de la colonne dans Cassandra est utilisé comme nom de la famille de colonnes dans Bigtable. Chaque item dans SET est utilisé comme qualificatif de colonne, et la valeur de la cellule est laissée vide.
LIST<item> Le nom de la colonne dans Cassandra est utilisé comme nom de la famille de colonnes dans Bigtable. L'horodatage actuel est utilisé comme qualificatif de colonne, et les éléments de la liste sont stockés comme valeur de cellule.

Pour en savoir plus sur le mappage des types de données dans Bigtable, consultez la présentation de GoogleSQL pour Bigtable.

Types de données non compatibles

Les types de données Cassandra suivants ne sont pas acceptés :

  • counter
  • date
  • decimal
  • duration
  • frozen
  • inet
  • smallint
  • time
  • timeuuid
  • tinyint
  • US-ASCII
  • user-defined types (UDT)
  • uuid
  • varint

Compatibilité avec le LDD

L'adaptateur de proxy Cassandra vers Bigtable est compatible avec les opérations LDD (langage de définition de données). Les opérations LDD vous permettent de créer et de gérer des tables directement à l'aide de commandes CQL. Nous vous recommandons cette approche pour configurer votre schéma, car elle est semblable à SQL, mais vous n'avez pas besoin de définir votre schéma dans des fichiers de configuration, puis d'exécuter des scripts pour créer des tables.

Les exemples suivants montrent comment l'adaptateur de proxy Cassandra vers Bigtable est compatible avec les opérations LDD :

  • Pour créer une table Cassandra à l'aide de CQL, exécutez la commande CREATE TABLE :

    CREATE TABLE keyspace.table (
        id bigint,
        name text,
        age int,
        PRIMARY KEY ((id), name)
    );
    
  • Pour ajouter une colonne au tableau, exécutez la commande ALTER TABLE :

    ALTER TABLE keyspace.table ADD email text;
    
  • Pour supprimer une table, exécutez la commande DROP TABLE :

    DROP TABLE keyspace.table;
    

Pour en savoir plus, consultez Prise en charge du LDD pour la création de schémas (méthode recommandée).

Compatibilité avec le LMD

L'adaptateur de proxy Cassandra vers Bigtable est compatible avec les opérations LMD (langage de manipulation de données) telles que INSERT, DELETE, UPDATE et SELECT.

Pour exécuter les requêtes LMD brutes, toutes les valeurs, à l'exception des valeurs numériques, doivent être entre guillemets simples, comme indiqué dans les exemples suivants :

  • SELECT * FROM keyspace.table WHERE name='john doe';
    
  • INSERT INTO keyspace.table (id, name) VALUES (1, 'john doe');
    

Effectuer une migration sans temps d'arrêt

Utilisez l'adaptateur de proxy Cassandra vers Bigtable avec l'outil de proxy de migration sans temps d'arrêt Open Source et l'outil de migration de données Cassandra pour migrer les données avec un temps d'arrêt minimal.

Le schéma suivant illustre les étapes de la migration de Cassandra vers Bigtable à l'aide de l'adaptateur de proxy :

Processus de migration de Cassandra vers Bigtable.
Figure 1. Processus de migration de Cassandra vers Bigtable (cliquez pour agrandir).

Pour migrer Cassandra vers Bigtable, procédez comme suit :

  1. Connectez votre application Cassandra à l'outil proxy ZDM.
  2. Activez les doubles écritures dans Cassandra et Bigtable.
  3. Migrez les données de manière groupée à l'aide de l'outil Cassandra Data Migrator.
  4. Validez votre migration. Une fois la validation effectuée, vous pouvez mettre fin à la connexion à Cassandra et vous connecter directement à Bigtable.

Lorsque vous utilisez l'adaptateur de proxy avec l'outil de proxy ZDM, les fonctionnalités de migration suivantes sont compatibles :

  • Écriture double : maintenir la disponibilité des données pendant la migration
  • Lectures asynchrones : mettez à l'échelle et testez la résistance de votre instance Bigtable
  • Vérification et reporting automatisés des données : assurez l'intégrité des données tout au long du processus.
  • Mappage des données : mappez les champs et les types de données pour répondre à vos normes de production.

Pour vous entraîner à migrer Cassandra vers Bigtable, consultez l'atelier de programmation Migration de Cassandra vers Bigtable avec un proxy à double écriture.

Client Cassandra vers Bigtable pour Java

Si vous souhaitez vous intégrer directement à Bigtable et remplacer vos pilotes Cassandra, la bibliothèque cliente Cassandra vers Bigtable pour Java vous permet d'intégrer des applications Java basées sur Cassandra à Bigtable à l'aide de CQL.

Pour obtenir des instructions sur la création de la bibliothèque et l'inclusion de la dépendance dans le code de l'application, consultez Client Cassandra vers Bigtable pour Java.

L'exemple suivant montre comment configurer votre application avec le client Cassandra vers Bigtable pour Java :

import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.cql.BoundStatement;
import com.datastax.oss.driver.api.core.cql.PreparedStatement;
import com.datastax.oss.driver.api.core.cql.ResultSet;
import com.datastax.oss.driver.api.core.cql.Row;
import com.google.bigtable.cassandra.BigtableCqlConfiguration;
import com.google.bigtable.cassandra.BigtableCqlSessionFactory;

/**
 * Example using Bigtable CQLSession
 */
public class ExampleWithBigtableCqlSession {

  public static void main(String[] args) {

    // Construct BigtableCqlConfiguration
    BigtableCqlConfiguration bigtableCqlConfiguration = BigtableCqlConfiguration.builder()
        .setProjectId("example-project-id")
        .setInstanceId("example-instance-id")
        .setDefaultColumnFamily("example-column-family")
        .setBigtableChannelPoolSize(4)
        .build();

    // Create CqlSession with BigtableCqlConfiguration
    BigtableCqlSessionFactory bigtableCqlSessionFactory = new BigtableCqlSessionFactory(bigtableCqlConfiguration);

    // Create CqlSession
    try (CqlSession session = bigtableCqlSessionFactory.newSession()) {

      // Create a table
      String createTableQuery = "CREATE TABLE <KEYSPACE>.<TABLE_NAME> (<COLUMN> <TYPE> PRIMARY KEY);";
      session.execute(createTableQuery);

      // Prepare an insert statement
      PreparedStatement preparedInsert = session.prepare(
          "INSERT INTO <KEYSPACE>.<TABLE_NAME> (<COLUMN>) VALUES (?)" // replace with your keyspace, table and columns
      );

      // Insert
      BoundStatement boundInsert = preparedInsert
          .bind()
          .setString("<COLUMN>", "<VALUE>");
      session.execute(boundInsert);

      // Query for all entries
      ResultSet resultSet = session.execute("SELECT <COLUMN> FROM <KEYSPACE>.<TABLE_NAME>;");
      // Print results
      for (Row row : resultSet) {
        System.out.println(row);
      }

    }

  }

}

Outils Open Source Cassandra supplémentaires

La compatibilité du proxy d'adaptateur Cassandra vers Bigtable avec CQL vous permet d'utiliser des outils supplémentaires dans l'écosystème Open Source Cassandra. Voici quelques exemples de ces outils :

  • Cqlsh : le shell CQL vous permet de vous connecter directement à Bigtable via l'adaptateur de proxy. Vous pouvez l'utiliser pour le débogage et la recherche rapide de données à l'aide de CQL.
  • Cassandra Data Migrator (CDM) : cet outil basé sur Spark est adapté à la migration de grands volumes de données historiques (jusqu'à des milliards de lignes). Cet outil fournit des fonctionnalités de validation, de création de rapports de différences et de relecture. Il est également entièrement compatible avec l'adaptateur de proxy.

Étapes suivantes