Migrazione da Apache Cassandra a Bigtable

Questo documento ti guida nella procedura di migrazione dei dati da Apache Cassandra a Bigtable con un'interruzione minima. Descrive come utilizzare strumenti open source, come l'adattatore proxy da Cassandra a Bigtable o il client da Cassandra a Bigtable per Java, per eseguire la migrazione. Prima di iniziare, assicurati di conoscere Bigtable per gli utenti Cassandra.

Adattatore proxy da Cassandra a Bigtable

L'adattatore proxy da Cassandra a Bigtable consente di connettere le applicazioni basate su Cassandra a Bigtable. L'adattatore proxy funge da interfaccia Cassandra compatibile con il cavo e consente all'applicazione di interagire con Bigtable utilizzando Cassandra Query Language (CQL). L'utilizzo dell'adattatore proxy non richiede la modifica dei driver Cassandra e le modifiche alla configurazione sono minime.

Per configurare l'adattatore proxy, vedi Adattatore proxy da Cassandra a Bigtable.

Per scoprire quali versioni di Cassandra supportano l'adattatore proxy, consulta Versioni di Cassandra supportate.

Keyspace Cassandra

Uno spazio delle chiavi Cassandra archivia le tabelle e gestisce le risorse in modo simile a un'istanza Bigtable. L'adattatore proxy da Cassandra a Bigtable gestisce la denominazione dello spazio delle chiavi in modo trasparente, in modo che tu possa eseguire query utilizzando gli stessi spazi delle chiavi. Tuttavia, devi creare una nuova istanza Bigtable per ottenere il raggruppamento logico delle tue tabelle. Devi anche configurare la replica Bigtable separatamente.

Tipi di dati supportati

La tabella seguente mostra come i tipi di dati CQL di Cassandra supportati vengono mappati ai relativi equivalenti Bigtable.

Tipo CQL Mappatura 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> Il nome della colonna in Cassandra viene utilizzato come nome della famiglia di colonne in Bigtable. Il key della mappa viene utilizzato come qualificatore di colonna e il value della mappa viene memorizzato come valore della cella.
SET<item> Il nome della colonna in Cassandra viene utilizzato come nome della famiglia di colonne in Bigtable. Ogni item in SET viene utilizzato come qualificatore di colonna e il valore della cella viene lasciato vuoto.
LIST<item> Il nome della colonna in Cassandra viene utilizzato come nome della famiglia di colonne in Bigtable. Il timestamp corrente viene utilizzato come qualificatore di colonna e gli elementi dell'elenco vengono memorizzati come valore della cella.

Per saperne di più sul mapping dei tipi di dati in Bigtable, consulta la panoramica di GoogleSQL per Bigtable.

Tipi di dati non supportati

I seguenti tipi di dati Cassandra non sono supportati:

  • counter
  • date
  • decimal
  • duration
  • frozen
  • inet
  • smallint
  • time
  • timeuuid
  • tinyint
  • US-ASCII
  • user-defined tipi (Tipi definiti dall'utente)
  • uuid
  • varint

Supporto DDL

L'adattatore proxy da Cassandra a Bigtable supporta le operazioni DDL (Data Definition Language). Le operazioni DDL ti consentono di creare e gestire tabelle direttamente tramite i comandi CQL. Ti consigliamo questo approccio per configurare lo schema perché è simile a SQL, ma non devi definire lo schema nei file di configurazione ed eseguire script per creare tabelle.

I seguenti esempi mostrano come l'adattatore proxy da Cassandra a Bigtable supporta le operazioni DDL:

  • Per creare una tabella Cassandra utilizzando CQL, esegui il comando CREATE TABLE:

    CREATE TABLE keyspace.table (
        id bigint,
        name text,
        age int,
        PRIMARY KEY ((id), name)
    );
    
  • Per aggiungere una nuova colonna alla tabella, esegui il comando ALTER TABLE:

    ALTER TABLE keyspace.table ADD email text;
    
  • Per eliminare una tabella, esegui il comando DROP TABLE:

    DROP TABLE keyspace.table;
    

Per ulteriori informazioni, consulta Supporto DDL per la creazione di schemi (metodo consigliato).

Supporto DML

L'adattatore proxy da Cassandra a Bigtable supporta operazioni DML (Data Manipulation Language) come INSERT, DELETE, UPDATE e SELECT.

Per eseguire le query DML non elaborate, tutti i valori, tranne quelli numerici, devono essere racchiusi tra virgolette singole, come mostrato negli esempi seguenti:

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

Eseguire la migrazione senza tempi di inattività

Utilizza l'adattatore proxy da Cassandra a Bigtable con lo strumento proxy Zero Downtime Migration (ZDM) open source e lo strumento di migrazione dei dati Cassandra per eseguire la migrazione dei dati con tempi di inattività minimi.

Il seguente diagramma mostra i passaggi per la migrazione da Cassandra a Bigtable utilizzando l'adattatore proxy:

Il processo di migrazione da Cassandra a Bigtable.
Figura 1. Il processo di migrazione da Cassandra a Bigtable (fai clic per ingrandire).

Per eseguire la migrazione di Cassandra a Bigtable:

  1. Collega l'applicazione Cassandra allo strumento proxy ZDM.
  2. Attiva la doppia scrittura in Cassandra e Bigtable.
  3. Sposta i dati in blocco utilizzando lo strumento Cassandra data migrator.
  4. Convalida la migrazione. Una volta convalidata, puoi terminare la connessione a Cassandra e connetterti direttamente a Bigtable.

Quando utilizzi l'adattatore proxy con lo strumento proxy ZDM, sono supportate le seguenti funzionalità di migrazione:

  • Scritture doppie: mantieni la disponibilità dei dati durante la migrazione
  • Letture asincrone: scalare ed eseguire test di stress dell'istanza Bigtable
  • Verifica e generazione di report automatici sui dati: garantisci l'integrità dei dati durante l'intero processo
  • Mappatura dei dati: mappa i campi e i tipi di dati in modo che soddisfino gli standard di produzione

Per esercitarti nella migrazione da Cassandra a Bigtable, consulta il codelab Migrazione da Cassandra a Bigtable con un proxy dual-write.

Client Cassandra a Bigtable per Java

Se vuoi eseguire l'integrazione direttamente con Bigtable e sostituire i driver Cassandra, la libreria client Cassandra to Bigtable per Java ti consente di integrare le applicazioni Java basate su Cassandra con Bigtable utilizzando CQL.

Per istruzioni sulla creazione della libreria e sull'inclusione della dipendenza nel codice dell'applicazione, consulta Cassandra to Bigtable Client per Java.

L'esempio seguente mostra come configurare l'applicazione con il client Cassandra a Bigtable per 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);
      }

    }

  }

}

Altri strumenti open source di Cassandra

La compatibilità del proxy adapter da Cassandra a Bigtable con CQL ti consente di utilizzare strumenti aggiuntivi nell'ecosistema open source Cassandra. Questi strumenti includono:

  • Cqlsh: La shell CQL ti consente di connetterti direttamente a Bigtable tramite l'adattatore proxy. Puoi utilizzarlo per il debug e le ricerche rapide di dati utilizzando CQL.
  • Cassandra Data Migrator (CDM): questo strumento basato su Spark è adatto per la migrazione di grandi volumi (fino a miliardi di righe) di dati storici. Lo strumento fornisce funzionalità di convalida, report sulle differenze e riproduzione ed è completamente compatibile con l'adattatore proxy.

Passaggi successivi