从 Apache Cassandra 迁移到 Bigtable
本文档将引导您完成从 Apache Cassandra 到 Bigtable 的数据迁移过程,同时将中断降至最低。本文介绍了如何使用开源工具(例如 Cassandra 到 Bigtable 的代理适配器或 Cassandra 到 Bigtable 的 Java 客户端)执行迁移。在开始之前,请确保您熟悉面向 Cassandra 用户的 Bigtable 简介。
选择迁移方法
您可以使用以下任一方法从 Apache Cassandra 迁移到 Bigtable:
- 借助 Cassandra to Bigtable 代理适配器,您可以将基于 Cassandra 的应用连接到 Bigtable,而无需更改 Cassandra 驱动程序。此方法非常适合需要极少代码更改的应用。
- 借助 Cassandra 到 Bigtable 的 Java 客户端,您可以直接与 Bigtable 集成并替换 Cassandra 驱动程序。这种方法非常适合需要高性能和灵活性的应用。
Cassandra to Bigtable 代理适配器
借助 Cassandra 到 Bigtable 代理适配器,您可以将基于 Cassandra 的应用连接到 Bigtable。代理适配器充当传输协议兼容的 Cassandra 接口,可让您的应用使用 Cassandra 查询语言 (CQL) 与 Bigtable 进行交互。使用代理适配器无需更改 Cassandra 驱动程序,并且只需进行极少的配置调整。
如需设置和配置代理适配器,请参阅 Cassandra 到 Bigtable 代理适配器。
如需了解哪些 Cassandra 版本支持代理适配器,请参阅支持的 Cassandra 版本。
限制
Cassandra 到 Bigtable 代理适配器对某些数据类型、函数、查询和子句的支持有限。如需了解详情,请参阅 Cassandra 到 Bigtable 的代理 - 限制。
Cassandra 键空间
Cassandra 键空间用于存储表并以类似于 Bigtable 实例的方式管理资源。Cassandra 到 Bigtable 的代理适配器以透明方式处理键空间命名,因此您可以使用相同的键空间进行查询。不过,您必须创建新的 Bigtable 实例才能实现表的逻辑分组。您还必须单独配置 Bigtable 复制。
DDL 支持
Cassandra 到 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 的代理适配器支持数据操纵语言 (DML) 操作,例如 INSERT
、DELETE
、UPDATE
和 SELECT
。
如需运行原始 DML 查询,除数值之外的所有值都必须用单引号引起来,如以下示例所示:
SELECT * FROM keyspace.table WHERE name='john doe';
INSERT INTO keyspace.table (id, name) VALUES (1, 'john doe');
实现零停机时间迁移
您可以将 Cassandra 到 Bigtable 代理适配器与开源的零停机时间迁移 (ZDM) 代理工具和 Cassandra 数据迁移工具搭配使用,以尽可能缩短停机时间的方式迁移数据。
下图显示了使用代理适配器从 Cassandra 迁移到 Bigtable 的步骤:


如需将 Cassandra 迁移到 Bigtable,请按以下步骤操作:
- 将 Cassandra 应用连接到 ZDM 代理工具。
- 启用对 Cassandra 和 Bigtable 的双重写入。
- 使用 Cassandra 数据迁移工具批量迁移数据。
- 验证迁移。验证通过后,您可以终止与 Cassandra 的连接,并直接连接到 Bigtable。
将代理适配器与 ZDM 代理工具搭配使用时,支持以下迁移功能:
- 双重写入:在迁移期间保持数据可用性
- 异步读取:扩缩和压力测试 Bigtable 实例
- 自动进行数据验证和报告:确保整个过程中的数据完整性
- 数据映射:映射字段和数据类型以满足您的生产标准
如需练习将 Cassandra 迁移到 Bigtable,请参阅使用双重写入代理从 Cassandra 迁移到 Bigtable Codelab。
Java 版 Cassandra 到 Bigtable 客户端
您可以直接与 Bigtable 集成,并替换 Cassandra 驱动程序。借助 Java 版 Cassandra 到 Bigtable 客户端库,您可以使用 CQL 将基于 Cassandra 的 Java 应用与 Bigtable 集成。
如需了解有关构建库以及在应用代码中添加依赖项的说明,请参阅 Cassandra 到 Bigtable 的 Java 客户端。
以下示例展示了如何使用 Java 版 Cassandra 到 Bigtable 客户端配置应用:
其他 Cassandra 开源工具
由于 Cassandra 到 Bigtable 代理适配器与 CQL 在传输协议方面兼容,因此您可以使用 Cassandra 开源生态系统中的其他工具。这些工具包括:
- Cqlsh:通过代理适配器,CQL shell 可让您直接连接到 Bigtable。您可以使用它通过 CQL 进行调试和快速数据查找。
- Cassandra Data Migrator (CDM):此工具基于 Spark,适合迁移大量(最多数十亿行)历史数据。该工具提供验证、差异报告和重放功能,并且与代理适配器完全兼容。