Melakukan migrasi dari Apache Cassandra ke Bigtable

Dokumen ini memandu Anda melalui proses migrasi data dari Apache Cassandra ke Bigtable dengan gangguan minimal. Dokumen ini menjelaskan cara menggunakan alat open source, seperti adaptor proxy Cassandra ke Bigtable atau klien Cassandra ke Bigtable untuk Java, guna melakukan migrasi. Sebelum memulai, pastikan Anda memahami Bigtable untuk pengguna Cassandra.

Adaptor proxy Cassandra ke Bigtable

Adaptor proxy Cassandra ke Bigtable memungkinkan Anda menghubungkan aplikasi berbasis Cassandra ke Bigtable. Adaptor proxy berfungsi sebagai antarmuka Cassandra yang kompatibel dengan wire, dan memungkinkan aplikasi Anda berinteraksi dengan Bigtable menggunakan Cassandra Query Language (CQL). Menggunakan adaptor proxy tidak mengharuskan Anda mengubah driver Cassandra, dan penyesuaian konfigurasi sangat minim.

Untuk menyiapkan dan mengonfigurasi adaptor proxy, lihat Adaptor proxy Cassandra ke Bigtable.

Untuk mempelajari versi Cassandra yang mendukung adaptor proxy, lihat Versi Cassandra yang didukung.

Keyspace Cassandra

Keyspace Cassandra menyimpan tabel Anda dan mengelola resource dengan cara yang mirip dengan instance Bigtable. Adaptor proxy Cassandra ke Bigtable menangani penamaan keyspace secara transparan, sehingga Anda dapat membuat kueri menggunakan keyspace yang sama. Namun, Anda harus membuat instance Bigtable baru untuk mencapai pengelompokan logis tabel Anda. Anda juga harus mengonfigurasi replikasi Bigtable secara terpisah.

Jenis data yang didukung

Tabel berikut menunjukkan cara jenis data CQL Cassandra yang didukung dipetakan ke padanan Bigtable.

Jenis CQL Pemetaan 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> Nama kolom di Cassandra digunakan sebagai nama grup kolom di Bigtable. key peta digunakan sebagai penentu kolom, dan value peta disimpan sebagai nilai sel.
SET<item> Nama kolom di Cassandra digunakan sebagai nama grup kolom di Bigtable. Setiap item dalam SET digunakan sebagai penentu kolom, dan nilai sel dibiarkan kosong.
LIST<item> Nama kolom di Cassandra digunakan sebagai nama grup kolom di Bigtable. Stempel waktu saat ini digunakan sebagai penentu kolom, dan item daftar disimpan sebagai nilai sel.

Untuk mengetahui informasi selengkapnya tentang pemetaan jenis data di Bigtable, lihat Ringkasan GoogleSQL untuk Bigtable.

Jenis data yang tidak didukung

Jenis data Cassandra berikut tidak didukung:

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

Dukungan DDL

Adaptor proxy Cassandra ke Bigtable mendukung operasi Data Definition Language (DDL). Operasi DDL memungkinkan Anda membuat dan mengelola tabel secara langsung melalui perintah CQL. Kami merekomendasikan pendekatan ini untuk menyiapkan skema Anda karena mirip dengan SQL, tetapi Anda tidak perlu menentukan skema dalam file konfigurasi, lalu menjalankan skrip untuk membuat tabel.

Contoh berikut menunjukkan cara adaptor proxy Cassandra ke Bigtable mendukung operasi DDL:

  • Untuk membuat tabel Cassandra menggunakan CQL, jalankan perintah CREATE TABLE:

    CREATE TABLE keyspace.table (
        id bigint,
        name text,
        age int,
        PRIMARY KEY ((id), name)
    );
    
  • Untuk menambahkan kolom baru ke tabel, jalankan perintah ALTER TABLE:

    ALTER TABLE keyspace.table ADD email text;
    
  • Untuk menghapus tabel, jalankan perintah DROP TABLE:

    DROP TABLE keyspace.table;
    

Untuk mengetahui informasi selengkapnya, lihat Dukungan DDL untuk Pembuatan Skema (Metode yang Direkomendasikan).

Dukungan DML

Adaptor proxy Cassandra ke Bigtable mendukung operasi Bahasa Pengolahan Data (DML) seperti INSERT, DELETE, UPDATE, dan SELECT.

Untuk menjalankan kueri DML mentah, semua nilai kecuali numerik harus memiliki tanda petik tunggal, seperti yang ditunjukkan dalam contoh berikut:

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

Mencapai migrasi tanpa periode nonaktif

Gunakan adaptor proxy Cassandra ke Bigtable dengan alat proxy Zero Downtime Migration (ZDM) open source dan alat migrator data Cassandra untuk memigrasikan data dengan periode nonaktif minimal.

Diagram berikut menunjukkan langkah-langkah untuk bermigrasi dari Cassandra ke Bigtable menggunakan adaptor proxy:

Proses migrasi Cassandra ke Bigtable.
Gambar 1. Proses migrasi Cassandra ke Bigtable (klik untuk memperbesar).

Untuk memigrasikan Cassandra ke Bigtable, ikuti langkah-langkah berikut:

  1. Hubungkan aplikasi Cassandra Anda ke alat proxy ZDM.
  2. Aktifkan penulisan ganda ke Cassandra dan Bigtable.
  3. Pindahkan data secara massal menggunakan alat Cassandra Data Migrator.
  4. Validasi migrasi Anda. Setelah divalidasi, Anda dapat menghentikan koneksi ke Cassandra dan terhubung langsung ke Bigtable.

Saat menggunakan adaptor proxy dengan alat proxy ZDM, kemampuan migrasi berikut didukung:

  • Penulisan ganda: mempertahankan ketersediaan data selama migrasi
  • Operasi baca asinkron: menskalakan dan menguji ketahanan instance Bigtable Anda
  • Pelaporan dan verifikasi data otomatis: memastikan integritas data selama proses berlangsung
  • Pemetaan data: memetakan kolom dan jenis data untuk memenuhi standar produksi Anda

Untuk berlatih memigrasikan Cassandra ke Bigtable, lihat codelab Migrasi dari Cassandra ke Bigtable dengan Proxy Penulisan Ganda.

Klien Cassandra ke Bigtable untuk Java

Jika Anda ingin berintegrasi langsung dengan Bigtable dan mengganti driver Cassandra, library klien Cassandra ke Bigtable untuk Java memungkinkan Anda mengintegrasikan aplikasi Java berbasis Cassandra dengan Bigtable menggunakan CQL.

Untuk mengetahui petunjuk tentang cara membangun library dan menyertakan dependensi dalam kode aplikasi, lihat Klien Cassandra ke Bigtable untuk Java.

Contoh berikut menunjukkan cara mengonfigurasi aplikasi Anda dengan klien Cassandra ke Bigtable untuk 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);
      }

    }

  }

}

Alat open source Cassandra tambahan

Kompatibilitas melalui kabel adaptor proxy Cassandra ke Bigtable dengan CQL memungkinkan Anda menggunakan alat tambahan dalam ekosistem open source Cassandra. Alat ini mencakup:

  • Cqlsh: Shell CQL memungkinkan Anda terhubung langsung ke Bigtable melalui adaptor proxy. Anda dapat menggunakannya untuk proses debug dan pencarian data cepat menggunakan CQL.
  • Cassandra Data Migrator (CDM): Alat berbasis Spark ini cocok untuk memigrasikan data historis dalam volume besar (hingga miliaran baris). Alat ini menyediakan kemampuan validasi, pelaporan perbedaan, dan pemutaran ulang, serta sepenuhnya kompatibel dengan adaptor proxy.

Langkah berikutnya