Apache Cassandra에서 Bigtable로 마이그레이션

이 문서에서는 중단을 최소화하면서 Apache Cassandra에서 Bigtable로 데이터를 마이그레이션하는 프로세스를 안내합니다. Cassandra에서 Bigtable로의 프록시 어댑터 또는 Java용 Cassandra에서 Bigtable로의 클라이언트와 같은 오픈소스 도구를 사용하여 마이그레이션을 실행하는 방법을 설명합니다. 시작하기 전에 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 Query Language (CQL)를 사용하여 Bigtable과 상호작용할 수 있도록 지원합니다. 프록시 어댑터를 사용하면 Cassandra 드라이버를 변경할 필요가 없으며 구성 조정이 최소화됩니다.

프록시 어댑터를 설정하고 구성하려면 Cassandra-Bigtable 프록시 어댑터를 참고하세요.

프록시 어댑터를 지원하는 Cassandra 버전을 알아보려면 지원되는 Cassandra 버전을 참고하세요.

제한사항

Cassandra to Bigtable 프록시 어댑터는 특정 데이터 유형, 함수, 쿼리, 절에 대한 지원을 제한적으로 제공합니다. 자세한 내용은 Cassandra to Bigtable 프록시 - 제한사항을 참고하세요.

Cassandra 키스페이스

Cassandra keyspace는 Bigtable 인스턴스와 유사한 방식으로 테이블을 저장하고 리소스를 관리합니다. Cassandra-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 프록시 어댑터는 INSERT, DELETE, UPDATE, SELECT과 같은 데이터 조작 언어 (DML) 작업을 지원합니다.

원시 DML 쿼리를 실행하려면 숫자 값을 제외한 모든 값에 작은따옴표가 있어야 합니다. 다음 예를 참고하세요.

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

다운타임 없는 마이그레이션 달성

오픈소스 다운타임 제로 마이그레이션 (ZDM) 프록시 도구Cassandra 데이터 마이그레이터 도구와 함께 Cassandra to Bigtable 프록시 어댑터를 사용하여 다운타임을 최소화하면서 데이터를 마이그레이션할 수 있습니다.

다음 다이어그램은 프록시 어댑터를 사용하여 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 드라이버를 대체할 수 있습니다. Cassandra에서 Bigtable로의 Java용 클라이언트 라이브러리를 사용하면 CQL을 사용하여 Cassandra 기반 Java 애플리케이션을 Bigtable과 통합할 수 있습니다.

라이브러리를 빌드하고 애플리케이션 코드에 종속 항목을 포함하는 방법은 Java용 Cassandra to Bigtable 클라이언트를 참고하세요.

다음 예에서는 Java용 Cassandra-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 오픈소스 도구

CQL과의 Cassandra to Bigtable 프록시 어댑터의 유선 호환성으로 인해 Cassandra 오픈소스 생태계에서 추가 도구를 사용할 수 있습니다. 이러한 도구에는 다음이 포함됩니다.

  • Cqlsh: CQL 셸을 사용하면 프록시 어댑터를 통해 Bigtable에 직접 연결할 수 있습니다. CQL을 사용하여 디버깅 및 빠른 데이터 조회를 할 수 있습니다.
  • Cassandra 데이터 마이그레이터 (CDM): 이 Spark 기반 도구는 대량 (최대 수십억 개의 행)의 이전 데이터를 마이그레이션하는 데 적합합니다. 이 도구는 유효성 검사, 차이 보고, 재생 기능을 제공하며 프록시 어댑터와 완전히 호환됩니다.

다음 단계