Migra de Apache Cassandra a Bigtable

En este documento, se explica el proceso de migración de datos de Apache Cassandra a Bigtable con una interrupción mínima. En ella, 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 realizar la migración. Antes de comenzar, asegúrate de conocer Bigtable para usuarios de Cassandra.

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 cables y permite que tu aplicación interactúe con Bigtable usando el lenguaje de consultas de Cassandra (CQL). El uso del adaptador de proxy no requiere que cambies 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 compatibles.

Espacio de claves de Cassandra

Un espacio de claves de Cassandra almacena tus tablas y administra los recursos de manera similar a una instancia de Bigtable. El adaptador de proxy de Cassandra a Bigtable controla la nomenclatura del espacio de claves de forma transparente, por lo que puedes realizar consultas con los mismos espacios de claves. Sin embargo, debes crear una nueva instancia de Bigtable para lograr una agrupación lógica de tus tablas. También debes configurar la replicación de Bigtable por separado.

Tipos de datos admitidos

En la siguiente tabla, se muestra cómo se asignan los tipos de datos de CQL de Cassandra admitidos a sus equivalentes de Bigtable.

Tipo de CQL Asignación de 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> El nombre de la columna en Cassandra se usa como el nombre de la familia de columnas en Bigtable. El key del mapa se usa como calificador de columna, y el value del mapa se almacena como el valor de la celda.
SET<item> El nombre de la columna en Cassandra se usa como el nombre de la familia de columnas en Bigtable. Cada item en SET se usa como calificador de columna, y el valor de la celda se deja vacío.
LIST<item> El nombre de la columna en Cassandra se usa como el nombre de la familia de columnas en Bigtable. La marca de tiempo actual se usa como calificador de columna, y los elementos de la lista se almacenan como el valor de la celda.

Para obtener más información sobre la asignación de tipos de datos en Bigtable, consulta la descripción general de GoogleSQL para Bigtable.

Tipos de datos no admitidos

No se admiten los siguientes tipos de datos de Cassandra:

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

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 administrar tablas directamente a través de comandos de CQL. Recomendamos este enfoque para configurar tu esquema, ya que es similar a SQL, pero no necesitas definir tu esquema en archivos de configuración y, luego, ejecutar secuencias de comandos para crear tablas.

En los siguientes ejemplos, se muestra cómo el adaptador de proxy de Cassandra a Bigtable admite 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 agregar una columna nueva a la tabla, ejecuta el comando ALTER TABLE:

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

    DROP TABLE keyspace.table;
    

Para obtener más información, consulta DDL Support for Schema Creation (Recommended Method).

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');
    

Lograr una migración sin tiempo de inactividad

Usa el adaptador de proxy de Cassandra a Bigtable con la herramienta de proxy de migración sin tiempo de inactividad (ZDM) de código abierto 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 con el adaptador de proxy:

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

Para migrar Cassandra a Bigtable, sigue estos pasos:

  1. Conecta tu aplicación de Cassandra a la herramienta de proxy de ZDM.
  2. Habilita las escrituras dobles en Cassandra y Bigtable.
  3. Mueve datos de forma masiva con la herramienta Cassandra data migrator.
  4. Valida la migración. Una vez validada, puedes finalizar la conexión a Cassandra y conectarte directamente a Bigtable.

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

  • Escrituras duales: Mantén la disponibilidad de los datos durante la migración
  • Lecturas asíncronas: Realiza pruebas de carga y de escalabilidad en tu instancia de Bigtable
  • Verificación y generación de informes de datos automatizados: Garantiza la integridad de los datos durante todo el proceso.
  • Asignación de datos: Asigna los tipos de datos y campos para cumplir con tus 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 doble.

Cliente de Cassandra a Bigtable para Java

Si deseas realizar la integración directamente con Bigtable y reemplazar tus controladores de Cassandra, la biblioteca cliente de Cassandra a Bigtable para Java te permite integrar aplicaciones basadas en Cassandra con Bigtable usando CQL.

Si deseas obtener instrucciones para compilar la biblioteca y, luego, 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 adicionales de código abierto de Cassandra

La compatibilidad de cable del adaptador de proxy de Cassandra a Bigtable con CQL te permite usar herramientas adicionales en el ecosistema de código abierto de Cassandra. Estas herramientas incluyen lo siguiente:

  • Cqlsh: El shell de CQL te permite conectarte directamente a Bigtable a través del adaptador de proxy. Puedes usarlo para depurar y realizar búsquedas rápidas de datos 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 proporciona capacidades de validación, informes de diferencias y reproducción, y es totalmente compatible con el adaptador de proxy.

¿Qué sigue?