Apache Cassandra から Bigtable に移行する

このドキュメントでは、中断を最小限に抑えながら Apache Cassandra から Bigtable にデータを移行するプロセスについて説明します。このドキュメントでは、Cassandra から Bigtable へのプロキシ アダプタや Cassandra から Bigtable への Java クライアントなどのオープンソース ツールを使用して移行を行う方法について説明します。始める前に、Cassandra ユーザー向け Bigtable について理解しておいてください。

移行方法を選択する

Apache Cassandra から Bigtable に移行するには、次のいずれかの方法を使用します。

  • Cassandra to Bigtable プロキシ アダプタを使用すると、Cassandra ドライバを変更せずに、Cassandra ベースのアプリケーションを Bigtable に接続できます。このアプローチは、コードの変更を最小限に抑える必要があるアプリケーションに最適です。
  • Java 用 Cassandra から Bigtable へのクライアントを使用すると、Bigtable と直接統合して、Cassandra ドライバを置き換えることができます。このアプローチは、高いパフォーマンスと柔軟性を必要とするアプリケーションに最適です。

Cassandra to Bigtable プロキシ アダプタ

Cassandra to Bigtable プロキシ アダプタを使用すると、Cassandra ベースのアプリケーションを Bigtable に接続できます。プロキシ アダプタはワイヤ互換の Cassandra インターフェースとして機能し、アプリケーションが Cassandra クエリ言語(CQL)を使用して Bigtable とやり取りできるようにします。プロキシ アダプタを使用する場合、Cassandra ドライバを変更する必要はなく、構成の調整も最小限で済みます。

プロキシ アダプタを設定して構成するには、Cassandra to Bigtable プロキシ アダプタをご覧ください。

プロキシ アダプタをサポートする Cassandra のバージョンについては、サポートされている Cassandra のバージョンをご覧ください。

制限事項

Cassandra to Bigtable プロキシ アダプタは、特定のデータ型、関数、クエリ、句に対して限定的なサポートを提供します。詳細については、Cassandra to Bigtable Proxy - 制限事項をご覧ください。

Cassandra キースペース

Cassandra のキースペースは、Bigtable インスタンスと同様の方法でテーブルを保存し、リソースを管理します。Cassandra to Bigtable プロキシ アダプタはキースペースの命名を透過的に処理するため、同じキースペースを使用してクエリを実行できます。ただし、テーブルの論理グループ化を実現するには、新しい Bigtable インスタンスを作成する必要があります。Bigtable レプリケーションも別途構成する必要があります。

DDL のサポート

Cassandra to Bigtable プロキシ アダプタは、データ定義言語(DDL)オペレーションをサポートしています。DDL オペレーションを使用すると、CQL コマンドを使用してテーブルを直接作成および管理できます。この方法は SQL に似ていますが、構成ファイルでスキーマを定義してからスクリプトを実行してテーブルを作成する必要がないため、スキーマの設定におすすめします。

次の例は、Cassandra から Bigtable へのプロキシ アダプタが DDL オペレーションをサポートする方法を示しています。

  • CQL を使用して Cassandra テーブルを作成するには、CREATE TABLE コマンドを実行します。

    CREATE TABLE keyspace.table (
        id bigint,
        name text,
        age int,
        PRIMARY KEY ((id), name)
    );
    
  • テーブルに新しい列を追加するには、ALTER TABLE コマンドを実行します。

    ALTER TABLE keyspace.table ADD email text;
    
  • テーブルを削除するには、DROP TABLE コマンドを実行します。

    DROP TABLE keyspace.table;
    

詳細については、スキーマ作成の DDL サポート(推奨方法)をご覧ください。

DML のサポート

Cassandra から Bigtable へのプロキシ アダプタは、INSERTDELETEUPDATESELECT などのデータ操作言語(DML)オペレーションをサポートしています。

次の例に示すように、数値以外のすべての値は単一引用符で囲む必要があります。

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

ゼロ ダウンタイムでの移行を実現する

Cassandra to Bigtable プロキシ アダプタをオープンソースの Zero Downtime Migration(ZDM)プロキシ ツールCassandra データ移行ツールとともに使用すると、ダウンタイムを最小限に抑えてデータを移行できます。

次の図は、プロキシ アダプタを使用して Cassandra から Bigtable に移行する手順を示しています。

Cassandra から Bigtable への移行プロセス。
図 1. Cassandra から Bigtable への移行プロセス(クリックして拡大)。

Cassandra を Bigtable に移行する手順は次のとおりです。

  1. Cassandra アプリケーションを ZDM プロキシ ツールに接続します。
  2. Cassandra と Bigtable への二重書き込みを有効にします。
  3. Cassandra データ移行ツールを使用して、データを一括で移動します。
  4. 移行を検証します。検証が完了したら、Cassandra への接続を終了し、Bigtable に直接接続できます。

ZDM プロキシツールでプロキシアダプタを使用する場合、次の移行機能がサポートされます。

  • デュアル書き込み: 移行中にデータの可用性を維持する
  • 非同期読み取り: Bigtable インスタンスをスケーリングしてストレステストを行う
  • 自動化されたデータ検証とレポート: プロセス全体でデータの完全性を確保します。
  • データ マッピング: 本番環境の基準を満たすようにフィールドとデータ型をマッピングします。

Cassandra から Bigtable への移行を練習するには、デュアル書き込みプロキシを使用した Cassandra から Bigtable への移行の Codelab をご覧ください。

Java 用 Cassandra to Bigtable クライアント

Bigtable と直接統合して Cassandra ドライバを置き換えることができます。Java 用 Cassandra to Bigtable クライアント ライブラリを使用すると、CQL を使用して Cassandra ベースの Java アプリケーションを Bigtable と統合できます。

ライブラリをビルドしてアプリケーション コードに依存関係を含める手順については、Java 用 Cassandra to Bigtable クライアントをご覧ください。

次の例は、Java 用の Cassandra to Bigtable クライアントを使用してアプリケーションを構成する方法を示しています。

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

    }

  }

}

その他の Cassandra オープンソース ツール

Cassandra to Bigtable プロキシ アダプタは CQL とワイヤ互換性があるため、Cassandra オープンソース エコシステムの追加ツールを使用できます。これらのツールには、次のようなものがあります。

  • Cqlsh: CQL シェルを使用すると、プロキシ アダプタを介して Bigtable に直接接続できます。CQL を使用したデバッグやデータの迅速な検索に使用できます。
  • Cassandra Data Migrator(CDM): この Spark ベースのツールは、大量(数十億行まで)の履歴データの移行に適しています。このツールは、検証、差分レポート、再生機能を提供し、プロキシ アダプターと完全に互換性があります。

次のステップ