从 Apache Cassandra 迁移到 Bigtable
本文档将引导您完成从 Apache Cassandra 到 Bigtable 的数据迁移过程,同时将中断降至最低。本文介绍了如何使用开源工具(例如 Cassandra 到 Bigtable 代理适配器或 Cassandra 到 Bigtable Java 客户端)执行迁移。在开始之前,请确保您熟悉面向 Cassandra 用户的 Bigtable 简介。
选择迁移方法
您可以使用以下任一方法从 Apache Cassandra 迁移到 Bigtable:
- 借助 Cassandra 到 Bigtable 的代理适配器,您可以将基于 Cassandra 的应用连接到 Bigtable,而无需更改 Cassandra 驱动程序。此方法非常适合需要极少代码更改的应用。
- 借助 Cassandra 到 Bigtable 的 Java 客户端,您可以直接与 Bigtable 集成并替换 Cassandra 驱动程序。这种方法非常适合需要高性能和灵活性的应用。
Cassandra to Bigtable 代理适配器
借助 Cassandra 到 Bigtable 代理适配器,您可以将基于 Cassandra 的应用连接到 Bigtable。代理适配器充当传输协议兼容的 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 客户端配置应用:
了解性能
Bigtable 旨在实现高吞吐量、低延迟和大规模可伸缩性。它可以每秒处理数百万个请求,并处理 PB 级的数据。如果您使用“Cassandra 到 Bigtable 的 Java 客户端”或“Cassandra 到 Bigtable 的代理适配器”从 Cassandra 迁移,请了解以下性能影响:
客户端和代理开销
这两种迁移方法只会产生极少的性能开销。它们充当 Cassandra 查询语言 (CQL) 与 Bigtable Data API 之间的转换层,后者经过优化,可实现高效运行。
使用 Cassandra 集合类型的性能
如果您的 Cassandra 数据模型使用集合类型(例如映射、集合或列表)来实现动态架构,那么 Bigtable 可以有效地处理这些模式。代理适配器和 Java 版客户端都会将这些集合操作映射到 Bigtable 的底层数据模型,该模型非常适合稀疏且宽的数据集。
在这些集合中执行元素级操作非常高效。这包括以下操作:
- 用于读取或写入映射中的单个值。
- 向集合中添加或从集合中移除元素。
- 将元素附加或前置到列表。
Bigtable 会针对单个集合元素优化这些类型的点操作,并且这些操作的性能与对标准标量列的操作相同。
对工作负载进行基准测试
Bigtable 的性能可能会因工作负载、架构设计、数据访问模式和集群配置而异。为了针对您的使用情形获得准确的性能指标,并确保 Bigtable 满足您的特定要求,我们建议您使用一种迁移方法,针对 Bigtable 对 Cassandra 工作负载进行基准比较。
如需详细了解 Bigtable 性能最佳实践,请参阅了解性能。
其他 Cassandra 开源工具
由于 Cassandra 到 Bigtable 代理适配器与 CQL 具有传输协议兼容性,因此您可以在 Cassandra 开源生态系统中利用其他工具。这些工具包括:
- Cqlsh:通过代理适配器,CQL shell 可让您直接连接到 Bigtable。您可以使用它通过 CQL 进行调试和快速数据查找。
- Cassandra Data Migrator (CDM):此工具基于 Spark,适合迁移大量(最多数十亿行)历史数据。该工具提供验证、差异报告和重放功能,并且与代理适配器完全兼容。