Von Apache Cassandra zu Bigtable migrieren

In diesem Dokument wird beschrieben, wie Sie Daten mit minimalen Unterbrechungen von Apache Cassandra zu Bigtable migrieren. Dabei wird erläutert, wie Sie Open-Source-Tools wie den Cassandra-zu-Bigtable-Proxyadapter oder den Cassandra-zu-Bigtable-Client für Java verwenden, um die Migration durchzuführen. Bevor Sie beginnen, sollten Sie sich mit Bigtable für Cassandra-Nutzer vertraut machen.

Migrationsansatz wählen

Sie können mit einem der folgenden Ansätze von Apache Cassandra zu Bigtable migrieren:

  • Mit dem Cassandra-zu-Bigtable-Proxyadapter können Sie Cassandra-basierte Anwendungen mit Bigtable verbinden, ohne Cassandra-Treiber ändern zu müssen. Dieser Ansatz ist ideal für Anwendungen, bei denen nur minimale Codeänderungen erforderlich sind.
  • Mit dem Cassandra-zu-Bigtable-Client für Java können Sie sich direkt in Bigtable einbinden und Ihre Cassandra Treiber ersetzen. Dieser Ansatz ist ideal für Anwendungen, die hohe Leistung und Flexibilität erfordern.

Cassandra-zu-Bigtable-Proxyadapter

Mit dem Cassandra-zu-Bigtable-Proxyadapter können Sie Cassandra-basierte Anwendungen mit Bigtable verbinden. Der Proxyadapter fungiert als drahtkompatible Cassandra-Schnittstelle und ermöglicht Ihrer Anwendung die Interaktion mit Bigtable über CQL. Bei Verwendung des Proxyadapters müssen Sie keine Cassandra-Treiber ändern und die Konfigurationsanpassungen sind minimal.

Informationen zum Einrichten und Konfigurieren des Proxyadapters finden Sie unter Cassandra-zu-Bigtable-Proxyadapter.

Informationen dazu, welche Cassandra-Versionen den Proxyadapter unterstützen, finden Sie unter Unterstützte Cassandra-Versionen.

Beschränkungen

Der Cassandra-zu-Bigtable-Proxyadapter bietet nur eingeschränkte Unterstützung für bestimmte Datentypen, Funktionen, Abfragen und Klauseln.

Weitere Informationen finden Sie unter Cassandra-zu-Bigtable-Proxy – Beschränkungen.

Cassandra-Schlüsselbereich

In einem Cassandra-Schlüsselbereich werden Ihre Tabellen gespeichert und Ressourcen auf ähnliche Weise wie in einer Bigtable-Instanz verwaltet. Der Cassandra-zu-Bigtable-Proxyadapter verarbeitet die Benennung des Schlüsselbereichs transparent, sodass Sie Abfragen mit denselben Schlüsselbereichen ausführen können. Sie müssen jedoch eine neue Bigtable Instanz erstellen, um Ihre Tabellen logisch zu gruppieren. Außerdem müssen Sie die Bigtable-Replikation separat konfigurieren.

DDL-Unterstützung

Der Cassandra-zu-Bigtable-Proxyadapter unterstützt DDL-Vorgänge (Data Definition Language). Mit DDL-Vorgängen können Sie Tabellen direkt über CQL-Befehle erstellen und verwalten. Wir empfehlen diesen Ansatz zum Einrichten Ihres Schemas, da er SQL ähnelt. Sie müssen Ihr Schema jedoch nicht in Konfigurationsdateien definieren und dann Skripts ausführen, um Tabellen zu erstellen.

Die folgenden Beispiele zeigen, wie der Cassandra-zu-Bigtable-Proxyadapter DDL-Vorgänge unterstützt:

  • Führen Sie den Befehl CREATE TABLE aus, um eine Cassandra-Tabelle mit CQL zu erstellen:

    CREATE TABLE keyspace.table (
        id bigint,
        name text,
        age int,
        PRIMARY KEY ((id), name)
    );
    
  • Führen Sie den Befehl ALTER TABLE aus, um der Tabelle eine neue Spalte hinzuzufügen:

    ALTER TABLE keyspace.table ADD email text;
    
  • Führen Sie den Befehl DROP TABLE aus, um eine Tabelle zu löschen:

    DROP TABLE keyspace.table;
    

Weitere Informationen finden Sie unter DDL-Unterstützung für die Schemaerstellung (empfohlene Methode).

DML-Unterstützung

Der Cassandra-zu-Bigtable-Proxyadapter unterstützt DML-Vorgänge (Data Manipulation Language) wie INSERT, DELETE, UPDATE und SELECT.

Wenn Sie die Roh-DML-Abfragen ausführen möchten, müssen alle Werte außer numerischen Werten in einfache Anführungszeichen gesetzt werden, wie in den folgenden Beispielen gezeigt:

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

Migration ohne Ausfallzeiten erreichen

Sie können den Cassandra-zu-Bigtable-Proxyadapter mit dem Open-Source Tool Zero Downtime Migration (ZDM) Proxy und dem Cassandra-Datenmigrator Tool verwenden, um Daten mit minimalen Ausfallzeiten zu migrieren.

Das folgende Diagramm zeigt die Schritte für die Migration von Cassandra zu Bigtable mit dem Proxyadapter:

Der Prozess der Migration von Cassandra zu Bigtable.
Abbildung 1. Der Migrationsprozess von Cassandra zu Bigtable (zum Vergrößern klicken).

Führen Sie die folgenden Schritte aus, um Cassandra zu Bigtable zu migrieren:

  1. Verbinden Sie Ihre Cassandra-Anwendung mit dem ZDM-Proxytool.
  2. Aktivieren Sie Dual-Writes für Cassandra und Bigtable.
  3. Verschieben Sie Daten mit dem Cassandra-Datenmigrator-Tool in großen Mengen.
  4. Validieren Sie die Migration. Nach der Validierung können Sie die Verbindung zu Cassandra beenden und sich direkt mit Bigtable verbinden.

Bei Verwendung des Proxyadapters mit dem ZDM-Proxytool werden die folgenden Migrationsfunktionen unterstützt:

  • Dual-Writes: Datenverfügbarkeit während der Migration aufrechterhalten
  • Asynchrone Lesevorgänge: Bigtable-Instanz skalieren und Stresstests durchführen
  • Automatisierte Datenprüfung und Berichterstellung: Datenintegrität während des gesamten Prozesses sicherstellen
  • Datenzuordnung: Feld- und Datentypen entsprechend Ihren Produktionsstandards zuordnen

Informationen zum Üben der Migration von Cassandra zu Bigtable finden Sie im Codelab Migration von Cassandra zu Bigtable mit einem Dual-Write-Proxy.

Cassandra-zu-Bigtable-Client für Java

Sie können sich direkt in Bigtable einbinden und Ihre Cassandra-Treiber ersetzen. Mit der Cassandra-zu-Bigtable-Clientbibliothek für Java können Sie Cassandra-basierte Java-Anwendungen mit Bigtable über CQL einbinden.

Eine Anleitung zum Erstellen der Bibliothek und zum Einbeziehen der Abhängigkeit in den Anwendungscode finden Sie unter Cassandra-zu-Bigtable-Client für Java.

Das folgende Beispiel zeigt, wie Sie Ihre Anwendung mit dem Cassandra-zu-Bigtable-Client für Java konfigurieren:

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

    }

  }

}

Leistung nachvollziehen

Bigtable ist auf hohen Durchsatz, niedrige Latenz und massive Skalierbarkeit ausgelegt. Es kann Millionen von Anfragen pro Sekunde für Petabytes von Daten verarbeiten. Wenn Sie mit dem Cassandra-zu-Bigtable-Client für Java oder dem Cassandra-zu-Bigtable-Proxyadapter von Cassandra migrieren, sollten Sie die folgenden Auswirkungen auf die Leistung berücksichtigen:

Client- und Proxy-Overhead

Beide Migrationsansätze verursachen nur einen minimalen Leistungs-Overhead. Sie fungieren als Übersetzungsebene zwischen der Cassandra Query Language (CQL) und der Bigtable Data API, die auf Effizienz optimiert ist.

Leistung mit Cassandra-Sammlungstypen

Wenn Ihr Cassandra-Datenmodell Sammlungstypen wie Zuordnungen, Mengen oder Listen verwendet, um dynamische Schemas zu implementieren, kann Bigtable diese Muster effektiv verarbeiten. Sowohl der Proxyadapter als auch der Client für Java ordnen diese Sammlungsvorgänge dem zugrunde liegenden Datenmodell von Bigtable zu, das sich gut für spärliche und breite Datasets eignet.

Vorgänge auf Elementebene in diesen Sammlungen sind sehr effizient. Dazu gehören die folgenden Aktionen:

  • Einen einzelnen Wert in einer Zuordnung lesen oder schreiben.
  • Ein Element zu einer Menge hinzufügen oder daraus entfernen.
  • Ein Element an eine Liste anhängen oder voranstellen.

Bigtable optimiert diese Arten von Punktvorgängen für einzelne Sammlungselemente und ihre Leistung ist identisch mit Vorgängen für standardmäßige skalare Spalten.

Benchmark für Ihre Arbeitslast

Die Bigtable-Leistung kann je nach Arbeitslast, Schemadesign, Datenzugriffsmustern und Clusterkonfiguration variieren. Um genaue Leistungsmesswerte für Ihren Anwendungsfall zu erhalten und sicherzustellen, dass Bigtable Ihre spezifischen Anforderungen erfüllt, empfehlen wir Ihnen, Ihre Cassandra-Arbeitslasten mit einem der Migrationsansätze mit Bigtable zu vergleichen.

Weitere Informationen zu Best Practices für die Bigtable-Leistung finden Sie unter Leistung nachvollziehen.

Zusätzliche Cassandra-Open-Source-Tools

Aufgrund der Drahtkompatibilität des Cassandra-zu-Bigtable-Proxyadapters mit CQL können Sie zusätzliche Tools im Cassandra-Open-Source-Ökosystem verwenden. Zu diesen Tools gehören:

  • Cqlsh: Mit der CQL-Shell können Sie über den Proxyadapter direkt eine Verbindung zu Bigtable herstellen. Sie können sie für das Debugging und schnelle Datensuchen mit CQL verwenden.
  • Cassandra Data Migrator (CDM): Dieses Spark-basierte Tool eignet sich für die Migration großer Mengen (bis zu Milliarden von Zeilen) von Verlaufsdaten. Das Tool bietet Validierungs-, Differenzberichts- und Wiedergabefunktionen und ist vollständig mit dem Proxyadapter kompatibel.

Nächste Schritte