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

이 문서에서는 중단을 최소화하면서 Apache Cassandra에서 Bigtable로 데이터를 마이그레이션하는 프로세스를 안내합니다. Cassandra에서 Bigtable로의 프록시 어댑터 또는 Java용 Cassandra에서 Bigtable로의 클라이언트와 같은 오픈소스 도구를 사용하여 마이그레이션을 실행하는 방법을 설명합니다. 시작하기 전에 Cassandra 사용자를 위한 Bigtable을 숙지하세요.

Cassandra to Bigtable 프록시 어댑터

Cassandra to Bigtable 프록시 어댑터를 사용하면 Cassandra 기반 애플리케이션을 Bigtable에 연결할 수 있습니다. 프록시 어댑터는 유선 호환 Cassandra 인터페이스로 작동하며 애플리케이션이 Cassandra Query Language (CQL)를 사용하여 Bigtable과 상호작용할 수 있도록 지원합니다. 프록시 어댑터를 사용하면 Cassandra 드라이버를 변경할 필요가 없으며 구성 조정이 최소화됩니다.

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

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

Cassandra 키스페이스

Cassandra keyspace는 Bigtable 인스턴스와 유사한 방식으로 테이블을 저장하고 리소스를 관리합니다. Cassandra-Bigtable 프록시 어댑터는 키스페이스 이름을 투명하게 처리하므로 동일한 키스페이스를 사용하여 쿼리할 수 있습니다. 하지만 테이블을 논리적으로 그룹화하려면 새 Bigtable 인스턴스를 만들어야 합니다. Bigtable 복제도 별도로 구성해야 합니다.

지원되는 데이터 유형

다음 표에서는 지원되는 Cassandra CQL 데이터 유형이 상응하는 Bigtable 데이터 유형에 매핑되는 방식을 보여줍니다.

CQL 유형 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> Cassandra의 열 이름은 Bigtable에서 column family 이름으로 사용됩니다. 맵의 key은 열 한정자로 사용되고 맵의 value은 셀 값으로 저장됩니다.
SET<item> Cassandra의 열 이름은 Bigtable에서 column family 이름으로 사용됩니다. SET의 각 item은 열 한정자로 사용되고 셀 값은 비워 둡니다.
LIST<item> Cassandra의 열 이름은 Bigtable에서 column family 이름으로 사용됩니다. 현재 타임스탬프가 column qualifier로 사용되고 목록 항목이 셀 값으로 저장됩니다.

Bigtable의 데이터 유형 매핑에 대한 자세한 내용은 Bigtable용 GoogleSQL 개요를 참고하세요.

지원되지 않는 데이터 유형

다음 Cassandra 데이터 유형은 지원되지 않습니다.

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

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 드라이버를 대체하려는 경우 Java용 Cassandra-Bigtable 클라이언트 라이브러리를 사용하면 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 기반 도구는 대량 (최대 수십억 개의 행)의 이전 데이터를 마이그레이션하는 데 적합합니다. 이 도구는 유효성 검사, 차이 보고, 재생 기능을 제공하며 프록시 어댑터와 완전히 호환됩니다.

다음 단계