Migrar de Apache Cassandra a Bigtable

En este documento se explica cómo migrar datos de Apache Cassandra a Bigtable con las mínimas interrupciones. En él se describe cómo usar herramientas de código abierto, como el adaptador de proxy de Cassandra a Bigtable o el cliente de Cassandra a Bigtable para Java, para llevar a cabo la migración. Antes de empezar, familiarízate con Bigtable para usuarios de Cassandra.

Elegir un método de migración

Puedes migrar de Apache Cassandra a Bigtable de una de las siguientes formas:

  • El adaptador de proxy de Cassandra a Bigtable te permite conectar aplicaciones basadas en Cassandra a Bigtable sin cambiar los controladores de Cassandra. Este enfoque es ideal para aplicaciones que requieren cambios mínimos en el código.
  • El cliente de Cassandra a Bigtable para Java te permite integrar directamente Bigtable y sustituir tus controladores de Cassandra. Este enfoque es ideal para las aplicaciones que requieren un alto rendimiento y flexibilidad.

Adaptador de proxy de Cassandra a Bigtable

El adaptador de proxy de Cassandra a Bigtable te permite conectar aplicaciones basadas en Cassandra a Bigtable. El adaptador de proxy funciona como una interfaz de Cassandra compatible con el cable y permite que tu aplicación interactúe con Bigtable mediante Cassandra Query Language (CQL). Para usar el adaptador de proxy, no es necesario cambiar los controladores de Cassandra y los ajustes de configuración son mínimos.

Para configurar el adaptador de proxy, consulta Adaptador de proxy de Cassandra a Bigtable.

Para saber qué versiones de Cassandra admiten el adaptador de proxy, consulta Versiones de Cassandra admitidas.

Limitaciones

El adaptador proxy de Cassandra a Bigtable ofrece una compatibilidad limitada con determinados tipos de datos, funciones, consultas y cláusulas. Para obtener más información, consulta Proxy de Cassandra a Bigtable: limitaciones.

Espacio de claves de Cassandra

Un espacio de claves de Cassandra almacena tus tablas y gestiona los recursos de forma similar a una instancia de Bigtable. El adaptador de proxy de Cassandra a Bigtable gestiona la nomenclatura de los espacios de claves de forma transparente, por lo que puedes hacer consultas con los mismos espacios de claves. Sin embargo, debe crear una nueva instancia de Bigtable para agrupar lógicamente sus tablas. También debes configurar la replicación de Bigtable por separado.

Compatibilidad con DDL

El adaptador de proxy de Cassandra a Bigtable admite operaciones del lenguaje de definición de datos (DDL). Las operaciones de DDL te permiten crear y gestionar tablas directamente mediante comandos de CQL. Recomendamos este método para configurar el esquema porque es similar a SQL, pero no es necesario definir el esquema en archivos de configuración y, después, ejecutar secuencias de comandos para crear tablas.

En los siguientes ejemplos se muestra cómo admite el adaptador de proxy de Cassandra a Bigtable las operaciones de DDL:

  • Para crear una tabla de Cassandra con CQL, ejecuta el comando CREATE TABLE:

    CREATE TABLE keyspace.table (
        id bigint,
        name text,
        age int,
        PRIMARY KEY ((id), name)
    );
    
  • Para añadir una columna a la tabla, ejecuta el comando ALTER TABLE:

    ALTER TABLE keyspace.table ADD email text;
    
  • Para eliminar una tabla, ejecuta el comando DROP TABLE:

    DROP TABLE keyspace.table;
    

Para obtener más información, consulta Compatibilidad con DDL para la creación de esquemas (método recomendado).

Compatibilidad con DML

El adaptador de proxy de Cassandra a Bigtable admite operaciones de lenguaje de manipulación de datos (DML), como INSERT, DELETE, UPDATE y SELECT.

Para ejecutar las consultas DML sin procesar, todos los valores, excepto los numéricos, deben tener comillas simples, como se muestra en los siguientes ejemplos:

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

Migración sin tiempo de inactividad

Puedes usar el adaptador de proxy de Cassandra a Bigtable con la herramienta de proxy de migración sin tiempo de inactividad (ZDM) de software libre y la herramienta migrador de datos de Cassandra para migrar datos con un tiempo de inactividad mínimo.

En el siguiente diagrama se muestran los pasos para migrar de Cassandra a Bigtable mediante el adaptador de proxy:

Proceso de migración de Cassandra a Bigtable.
Imagen 1. Proceso de migración de Cassandra a Bigtable (haz clic para ampliar).

Para migrar de Cassandra a Bigtable, sigue estos pasos:

  1. Conecta tu aplicación Cassandra a la herramienta proxy de ZDM.
  2. Habilita la escritura dual en Cassandra y Bigtable.
  3. Mueve datos en bloque con la herramienta migrador de datos de Cassandra.
  4. Valida la migración. Una vez validada, puedes finalizar la conexión con Cassandra y conectarte directamente a Bigtable.

Cuando se usa el adaptador de proxy con la herramienta de proxy de ZDM, se admiten las siguientes funciones de migración:

  • Escrituras duales: mantener la disponibilidad de los datos durante la migración
  • Lecturas asíncronas: escala y prueba de estrés de tu instancia de Bigtable
  • Verificación y generación de informes de datos automatizadas: aseguran la integridad de los datos durante todo el proceso.
  • Asignación de datos: asigne campos y tipos de datos para cumplir sus estándares de producción.

Para practicar la migración de Cassandra a Bigtable, consulta el codelab Migración de Cassandra a Bigtable con un proxy de escritura dual.

Cliente de Cassandra a Bigtable para Java

Puedes integrar directamente Bigtable y sustituir tus controladores de Cassandra. La biblioteca del cliente de Cassandra a Bigtable para Java te permite integrar aplicaciones Java basadas en Cassandra con Bigtable mediante CQL.

Para obtener instrucciones sobre cómo compilar la biblioteca e incluir la dependencia en el código de la aplicación, consulta Cliente de Cassandra a Bigtable para Java.

En el siguiente ejemplo se muestra cómo configurar tu aplicación con el cliente de Cassandra a Bigtable para 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);
      }

    }

  }

}

Herramientas de código abierto adicionales de Cassandra

Gracias a la compatibilidad de la conexión del adaptador de proxy de Cassandra a Bigtable con CQL, puedes usar herramientas adicionales en el ecosistema de software libre de Cassandra. Estas herramientas incluyen las siguientes:

  • Cqlsh: El shell de CQL te permite conectarte directamente a Bigtable a través del adaptador de proxy. Puedes usarla para depurar y buscar datos rápidamente con CQL.
  • Cassandra Data Migrator (CDM): esta herramienta basada en Spark es adecuada para migrar grandes volúmenes (hasta miles de millones de filas) de datos históricos. La herramienta ofrece funciones de validación, generación de informes de diferencias y reproducción, y es totalmente compatible con el adaptador de proxy.

Siguientes pasos