Migrar do Apache Cassandra para o Bigtable

Este documento orienta você no processo de migração de dados do Apache Cassandra para o Bigtable com o mínimo de interrupção. Ela descreve como usar ferramentas de código aberto, como o adaptador de proxy do Cassandra para Bigtable ou o cliente do Cassandra para Bigtable em Java, para realizar a migração. Antes de começar, confira o artigo Bigtable para usuários do Cassandra.

Adaptador de proxy do Cassandra para o Bigtable

O adaptador de proxy do Cassandra para o Bigtable permite conectar aplicativos baseados no Cassandra ao Bigtable. O adaptador de proxy funciona como uma interface do Cassandra compatível com fio e permite que seu aplicativo interaja com o Bigtable usando a linguagem de consulta do Cassandra (CQL). O uso do adaptador de proxy não exige que você mude os drivers do Cassandra, e os ajustes de configuração são mínimos.

Para configurar e configurar o adaptador de proxy, consulte Adaptador de proxy do Cassandra para o Bigtable.

Para saber quais versões do Cassandra são compatíveis com o adaptador de proxy, consulte Versões compatíveis do Cassandra.

Keyspace do Cassandra

Um keyspace do Cassandra armazena suas tabelas e gerencia recursos de maneira semelhante a uma instância do Bigtable. O adaptador de proxy do Cassandra para Bigtable processa a nomenclatura do keyspace de forma transparente para que você possa consultar usando os mesmos keyspaces. No entanto, é necessário criar uma nova instância do Bigtable para agrupar logicamente suas tabelas. Também é necessário configurar a replicação do Bigtable separadamente.

Tipos de dados compatíveis

A tabela a seguir mostra como os tipos de dados compatíveis do CQL do Cassandra são mapeados para os equivalentes do Bigtable.

Tipo de CQL Mapeamento do 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> O nome da coluna no Cassandra é usado como o nome do grupo de colunas no Bigtable. O key do mapa é usado como o qualificador de coluna, e o value do mapa é armazenado como o valor da célula.
SET<item> O nome da coluna no Cassandra é usado como o nome do grupo de colunas no Bigtable. Cada item no SET é usado como um qualificador de coluna, e o valor da célula fica vazio.
LIST<item> O nome da coluna no Cassandra é usado como o nome do grupo de colunas no Bigtable. O carimbo de data/hora atual é usado como o qualificador de coluna, e os itens da lista são armazenados como o valor da célula.

Para mais informações sobre o mapeamento de tipos de dados no Bigtable, consulte Visão geral do GoogleSQL para Bigtable.

Tipos de dados não compatíveis

Os seguintes tipos de dados do Cassandra não são compatíveis:

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

Suporte a DDL

O adaptador de proxy do Cassandra para Bigtable é compatível com operações de linguagem de definição de dados (DDL). Com as operações de DDL, é possível criar e gerenciar tabelas diretamente com comandos CQL. Recomendamos essa abordagem para configurar seu esquema porque ela é semelhante ao SQL, mas não é necessário definir o esquema em arquivos de configuração e executar scripts para criar tabelas.

Os exemplos a seguir mostram como o adaptador de proxy do Cassandra para Bigtable oferece suporte a operações de DDL:

  • Para criar uma tabela do Cassandra usando CQL, execute o comando CREATE TABLE:

    CREATE TABLE keyspace.table (
        id bigint,
        name text,
        age int,
        PRIMARY KEY ((id), name)
    );
    
  • Para adicionar uma nova coluna à tabela, execute o comando ALTER TABLE:

    ALTER TABLE keyspace.table ADD email text;
    
  • Para excluir uma tabela, execute o comando DROP TABLE:

    DROP TABLE keyspace.table;
    

Para mais informações, consulte Suporte a DDL para criação de esquema (método recomendado).

Suporte a DML

O adaptador de proxy do Cassandra para o Bigtable é compatível com operações da linguagem de manipulação de dados (DML, na sigla em inglês), como INSERT, DELETE, UPDATE e SELECT.

Para executar as consultas DML brutas, todos os valores, exceto os numéricos, precisam ter aspas simples, conforme mostrado nos exemplos a seguir:

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

Realizar migração sem inatividade

Use o adaptador de proxy do Cassandra para Bigtable com a ferramenta de proxy de migração sem inatividade (ZDM, na sigla em inglês) de código aberto e a ferramenta Migrador de dados do Cassandra para migrar dados com tempo de inatividade mínimo.

O diagrama a seguir mostra as etapas para migrar do Cassandra para o Bigtable usando o adaptador de proxy:

O processo de migração do Cassandra para o Bigtable.
Figura 1. O processo de migração do Cassandra para o Bigtable (clique para ampliar).

Para migrar do Cassandra para o Bigtable, siga estas etapas:

  1. Conecte seu aplicativo Cassandra à ferramenta de proxy do ZDM.
  2. Ative gravações duplas no Cassandra e no Bigtable.
  3. Mova dados em massa usando a ferramenta Cassandra Data Migrator.
  4. Valide sua migração. Depois da validação, encerre a conexão com o Cassandra e conecte-se diretamente ao Bigtable.

Ao usar o adaptador de proxy com a ferramenta de proxy ZDM, as seguintes funcionalidades de migração são compatíveis:

  • Gravações duplas: mantêm a disponibilidade de dados durante a migração.
  • Leituras assíncronas: escalone e teste a capacidade da sua instância do Bigtable.
  • Verificação e geração de relatórios de dados automatizadas: garante a integridade dos dados durante todo o processo.
  • Mapeamento de dados: mapeie campos e tipos de dados para atender aos padrões de produção.

Para praticar a migração do Cassandra para o Bigtable, consulte o codelab Migração do Cassandra para o Bigtable com um proxy de gravação dupla.

Cliente do Cassandra para Bigtable em Java

Se você quiser fazer a integração diretamente com o Bigtable e substituir os drivers do Cassandra, a biblioteca de cliente do Cassandra para Bigtable em Java permitirá integrar aplicativos Java baseados no Cassandra ao Bigtable usando CQL.

Para instruções sobre como criar a biblioteca e incluir a dependência no código do aplicativo, consulte Cliente do Cassandra para Bigtable em Java.

O exemplo a seguir mostra como configurar seu aplicativo com o cliente Cassandra para Bigtable em 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);
      }

    }

  }

}

Outras ferramentas de código aberto do Cassandra

A compatibilidade de fio do adaptador de proxy do Cassandra para Bigtable com CQL permite usar outras ferramentas no ecossistema de código aberto do Cassandra. Essas ferramentas incluem:

  • Cqlsh: o shell CQL permite que você se conecte diretamente ao Bigtable pelo adaptador de proxy. É possível usar esse recurso para depuração e pesquisas rápidas de dados usando CQL.
  • Migrador de dados do Cassandra (CDM): essa ferramenta baseada no Spark é adequada para migrar grandes volumes (até bilhões de linhas) de dados históricos. A ferramenta oferece validação, relatórios de diferenças e recursos de repetição, além de ser totalmente compatível com o adaptador de proxy.

A seguir