Migre do Apache Cassandra para o Bigtable

Este documento explica o processo de migração de dados do Apache Cassandra para o Bigtable com a mínima interrupção. Descreve como usar ferramentas de código aberto, como o adaptador de proxy do Cassandra para o Bigtable ou o cliente do Cassandra para Java, para fazer a migração. Antes de começar, certifique-se de que conhece o Bigtable para utilizadores do Cassandra.

Escolha uma abordagem de migração

Pode migrar do Apache Cassandra para o Bigtable através de uma das seguintes abordagens:

  • O adaptador de proxy do Cassandra para o Bigtable permite-lhe ligar aplicações baseadas no Cassandra ao Bigtable sem alterar os controladores do Cassandra. Esta abordagem é ideal para aplicações que requerem alterações mínimas ao código.
  • O cliente Cassandra para Bigtable para Java permite-lhe integrar-se diretamente com o Bigtable e substituir os controladores do Cassandra. Esta abordagem é ideal para aplicações que requerem elevado desempenho e flexibilidade.

Adaptador de proxy do Cassandra para o Bigtable

O adaptador de proxy do Cassandra para o Bigtable permite-lhe ligar aplicações baseadas no Cassandra ao Bigtable. O adaptador de proxy funciona como uma interface Cassandra compatível com fios e permite que a sua aplicação interaja com o Bigtable através do CQL. A utilização do transformador de proxy não requer que altere os controladores do Cassandra e os ajustes de configuração são mínimos.

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

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

Limitações

O adaptador de proxy do Cassandra para o Bigtable oferece suporte limitado para determinados tipos de dados, funções, consultas e cláusulas.

Para mais informações, consulte o artigo Proxy do Cassandra para o Bigtable: limitações.

Cassandra keyspace

Um keyspace do Cassandra armazena as suas tabelas e gere os recursos de forma semelhante a uma instância do Bigtable. O adaptador de proxy do Cassandra para o Bigtable processa a nomenclatura do keyspace de forma transparente, para que possa consultar através dos mesmos keyspaces. No entanto, tem de criar uma nova instância do Bigtable para conseguir o agrupamento lógico das suas tabelas. Também tem de configurar a replicação do Bigtable separadamente.

Compatibilidade com LDD

O adaptador de proxy do Cassandra para o Bigtable suporta operações de linguagem de definição de dados (LDD). As operações DDL permitem-lhe criar e gerir tabelas diretamente através de comandos CQL. Recomendamos esta abordagem para configurar o seu esquema, porque é semelhante ao SQL, mas não precisa de definir o esquema em ficheiros de configuração e, em seguida, executar scripts para criar tabelas.

Os exemplos seguintes mostram como o adaptador de proxy do Cassandra para o Bigtable suporta operações de LDD:

  • Para criar uma tabela do Cassandra com o 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 eliminar uma tabela, execute o comando DROP TABLE:

    DROP TABLE keyspace.table;
    

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

Apoio técnico para DML

O adaptador de proxy do Cassandra para o Bigtable suporta operações de linguagem de manipulação de dados (DML), como INSERT, DELETE, UPDATE e SELECT.

Para executar as consultas DML não processadas, todos os valores, exceto os numéricos, têm de ter aspas simples, conforme mostrado nos exemplos seguintes:

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

Alcance uma migração sem tempo de inatividade

Pode usar o adaptador de proxy do Cassandra para o Bigtable com a ferramenta de proxy de migração sem tempo de inatividade (ZDM) de código aberto e a ferramenta migrador de dados do Cassandra para migrar dados com um tempo de inatividade mínimo.

O diagrama seguinte mostra os passos para migrar do Cassandra para o Bigtable através do 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 o Cassandra para o Bigtable, siga estes passos:

  1. Associe a sua aplicação Cassandra à ferramenta de proxy do ZDM.
  2. Ative as escritas duplas no Cassandra e no Bigtable.
  3. Mova dados em massa com a ferramenta Cassandra data migrator.
  4. Valide a migração. Depois de validada, pode terminar a ligação ao Cassandra e ligar-se diretamente ao Bigtable.

Quando usar o adaptador de proxy com a ferramenta de proxy ZDM, são suportadas as seguintes capacidades de migração:

  • Escritas duplas: mantenha a disponibilidade dos dados durante a migração
  • Leituras assíncronas: dimensione e teste o desempenho da sua instância do Bigtable
  • Validação e relatórios de dados automatizados: garantir a integridade dos dados ao longo do processo
  • Mapeamento de dados: mapeie os campos e os tipos de dados para cumprir as suas normas 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 Cassandra para Bigtable para Java

Pode integrar-se diretamente com o Bigtable e substituir os seus controladores do Cassandra. A biblioteca do cliente do Cassandra para Java permite-lhe integrar aplicações Java baseadas no Cassandra com o Bigtable através do CQL.

Para obter instruções sobre como criar a biblioteca e incluir a dependência no código da aplicação, consulte o artigo Cliente do Cassandra para o Bigtable para Java.

O exemplo seguinte mostra como configurar a sua aplicação com o cliente Cassandra para 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);
      }

    }

  }

}

Compreenda o desempenho

O Bigtable foi concebido para um elevado débito, uma baixa latência e uma escalabilidade massiva. Pode processar milhões de pedidos por segundo em petabytes de dados. Quando migra do Cassandra através do cliente Cassandra para Bigtable para Java ou do adaptador de proxy Cassandra para Bigtable, compreenda as seguintes implicações de desempenho:

Sobrecarga do cliente e do proxy

Ambas as abordagens de migração introduzem uma sobrecarga de desempenho mínima. Atuam como uma camada de tradução entre o idioma de consulta do Cassandra (CQL) e a API Google Cloud Bigtable Data, que está otimizada para eficiência.

Desempenho com tipos de coleções do Cassandra

Se o seu modelo de dados do Cassandra usar tipos de recolha, como mapas, conjuntos ou listas, para implementar esquemas dinâmicos, o Bigtable pode processar estes padrões de forma eficaz. Tanto o adaptador de proxy como o cliente para Java mapeiam estas operações de recolha para o modelo de dados subjacente do Bigtable, que é adequado para conjuntos de dados esparsos e amplos.

As operações ao nível do elemento nestas coleções são altamente eficientes. Isto inclui as seguintes ações:

  • Para ler ou escrever um único valor num mapa.
  • Para adicionar ou remover um elemento de um conjunto.
  • Para acrescentar ou antepor um elemento a uma lista.

O Bigtable otimiza estes tipos de operações de pontos em elementos de recolha individuais, e o respetivo desempenho é idêntico ao das operações em colunas escalares padrão.

Teste o desempenho da sua carga de trabalho

O desempenho do Bigtable pode variar consoante a carga de trabalho, a estrutura do esquema, os padrões de acesso aos dados e a configuração do cluster. Para obter métricas de desempenho precisas para o seu exemplo de utilização e garantir que o Bigtable cumpre os seus requisitos específicos, recomendamos que teste o desempenho das suas cargas de trabalho do Cassandra em comparação com o Bigtable através de uma das abordagens de migração.

Para mais informações sobre as práticas recomendadas de desempenho do Bigtable, consulte o artigo Compreenda o desempenho.

Ferramentas de código aberto do Cassandra adicionais

Devido à compatibilidade de fios do adaptador de proxy do Cassandra para o Bigtable com CQL, pode usar ferramentas adicionais no ecossistema de código aberto do Cassandra. Estas ferramentas incluem o seguinte:

  • Cqlsh: A shell CQL permite-lhe ligar-se diretamente ao Bigtable através do adaptador de proxy. Pode usá-la para depuração e pesquisas rápidas de dados através do CQL.
  • Cassandra Data Migrator (CDM): Esta ferramenta baseada no Spark é adequada para migrar grandes volumes (até milhares de milhões de linhas) de dados do histórico. A ferramenta oferece validação, relatórios de diferenças e capacidades de repetição, e é totalmente compatível com o adaptador de proxy.

O que se segue?