从 DynamoDB 迁移到 Bigtable

Bigtable 和 DynamoDB 是分布式键值对存储区,可以支持每秒数百万次的查询次数 (QPS),提供可扩缩至 PB 级数据的存储空间,并容忍节点故障。

本文档适用于想要迁移到 Bigtable 的 DynamoDB 开发者和数据库管理员。如果您想设计应用以将 Bigtable 用作数据存储区,本指南也很有用。

首先,请使用 Google 提供的迁移工具,该工具可帮助您从 DynamoDB 迁移到 Bigtable。本页介绍了迁移工具,比较了这两种数据库系统,并介绍了在迁移之前需要了解的基础架构和交互细节方面的差异。

开始使用 DynamoDB 到 Bigtable 的迁移工具

Google Cloud 专业服务团队提供了一款开源迁移工具,可简化从 DynamoDB 到 Bigtable 的数据迁移。该工具可自动执行将数据导入 Google Cloud 并加载到 Bigtable 中的过程。

使用该工具导出 DynamoDB 表,然后将其转移到 Cloud Storage。该工具会从您的 Cloud Storage 存储桶中读取导出的文件,并使用 Dataflow 模板转换数据,使其与 Bigtable 兼容。此转换包括将 DynamoDB 属性映射到 Bigtable 行。然后,Dataflow 作业会将转换后的数据写入您的 Bigtable 表。

如需了解详情或开始使用,请参阅 DynamoDB 到 Bigtable 迁移实用程序

从 DynamoDB 到 Bigtable 的迁移路径。

DynamoDB 和 Bigtable 的比较

本部分将探讨 DynamoDB 和 Bigtable 之间的异同。

控制平面

在 DynamoDB 和 Bigtable 中,控制平面可让您配置容量,以及设置和管理资源。DynamoDB 是一种无服务器产品,与 DynamoDB 的最高互动级别是表级别。在预置容量模式下,您可以在此处预置读写请求单位、选择区域和复制,以及管理备份。 Bigtable 不是无服务器产品;您必须创建一个包含一个或多个集群的实例,其容量由集群拥有的节点数决定。如需详细了解这些资源,请参阅实例、集群和节点

下表比较了 DynamoDB 和 Bigtable 的控制平面资源。

DynamoDB Bigtable
表: 具有已定义主键的项的集合。表具有备份复制容量设置。 实例:一组位于不同 Google Cloud 可用区或区域的 Bigtable 集群,这些集群之间会发生复制和连接路由。复制政策是在实例级层设置的。

集群:一组位于同一地理位置的Google Cloud 可用区中的节点,最好与应用服务器位于同一位置,以减少延迟和复制。通过调整每个集群中的节点数量来管理容量。

:按行键编入索引的值的逻辑组织。

备份在表级层进行控制。
读取容量单位 (RCU) 和写入容量单位 (WCU): 允许每秒读取或写入固定有效载荷大小的单位。对于有效载荷大小较大的每次操作,您需要支付读取或写入单位费用。

UpdateItem 操作会消耗更新后项目(更新前或更新后)的最大大小所用的写入容量,即使更新仅涉及项目属性的子集也是如此。
节点:一种负责读取和写入数据的虚拟计算资源。集群拥有的节点数量会影响读取、写入和扫描的吞吐量限制。您可以根据延迟时间目标、请求数和载荷大小的组合来调整节点数。

SSD 节点的读取和写入吞吐量相同,这与 RCU 和 WCU 之间的显著差异不同。如需了解详情,请参阅典型工作负载下的性能
分区: 由与节点共置的固态硬盘 (SSD) 支持的连续行块。

每个分区的写入容量单位 (WCU) 硬性限制为 1,000 个,读取容量单位 (RCU) 硬性限制为 3,000 个,数据硬性限制为 10 GB。
平板电脑: 由所选存储介质(SSD 或 HDD)支持的连续行块。

表会被分片为多个片,以平衡工作负载。片不是存储在 Bigtable 的节点上,而是存储在 Google 的分布式文件系统上,这样可以在伸缩时快速重新分发数据,并通过维护多个副本来提供额外的持久性。
全局表: 一种通过在多个区域自动传播数据更改来提高数据可用性和耐用性的方法。 复制: 一种通过在多个区域或同一区域内的多个可用区之间自动传播数据更改来提高数据可用性和耐用性的方式。
不适用 (N/A) 应用配置文件: 指示 Bigtable 如何将客户端 API 调用路由到实例中的相应集群的设置。您还可以将应用配置文件用作归因指标细分标记。

地理位置复制

复制功能用于满足客户的以下需求:

  • 在发生可用区级或区域级故障时,可实现高可用性,从而保障业务连续性。
  • 将服务数据放置在最终用户附近,以便无论他们身在何处,都能以低延迟提供服务。
  • 当您需要在某个集群上实现批处理工作负载,并依靠复制功能来为集群提供服务时,需要进行工作负载隔离。

Bigtable 支持将复制的集群分布在最多 8 个 Google Cloud 提供 Bigtable 的区域中的任意数量的可用区中。大多数区域都有三个可用区。如需了解详情,请参阅区域和可用区

Bigtable 会在多主拓扑中自动跨集群复制数据,这意味着您可以向任何集群读取和写入数据。Bigtable 的复制功能提供最终一致性。如需了解详情,请参阅复制概览

DynamoDB 提供全局表,以支持跨多个区域的表复制。全局表是多主表,可在区域之间自动复制。复制操作具有最终一致性。

下表列出了复制概念,并介绍了它们在 DynamoDB 和 Bigtable 中的可用性。

属性 DynamoDB Bigtable
多主复制 可以。

您可以读取和写入任何全局表。
可以。

您可以读取和写入任何 Bigtable 集群。
一致性模型 最终一致性。

对于全球表,在区域级实现读己所写 (read-your-writes) 一致性。
最终一致性。

如果您将读取和写入操作都发送到同一集群,则所有表都可实现集群级读己所写一致性。
复制延迟时间 无服务等级协议 (SLA)。

无 SLA。

配置粒度 表级。 实例级。

一个实例可以包含多个表。
实现 创建全局表,并在每个所选区域中包含一个表副本。

区域级。

通过将表转换为全局表,在副本之间自动复制。

必须为表启用 DynamoDB Streams,并且流中包含项目的新旧映像。

删除某个区域即可移除该区域中的全局表。
创建具有多个集群的实例。
该实例中的集群之间会自动进行复制。

可用区级。

向 Bigtable 实例添加集群和从中移除集群。
复制选项 每个表。 每个实例。
流量路由和可用性 流量路由到最近的地理位置副本。

如果发生故障,您可以应用自定义业务逻辑来确定何时将请求重定向到其他区域。
使用应用配置文件配置集群流量路由政策。

使用多集群路由将流量自动路由到最近的运行状况良好的集群。

如果发生故障,Bigtable 支持在集群之间自动进行故障切换,以实现高可用性。
扩缩 复制写入请求单位 (R-WRU) 中的写入容量会在副本之间同步。

复制读取容量单位 (R-RCU) 中的读取容量是按副本计算的。
您可以根据需要向每个复制的集群添加节点或从中移除节点,从而独立扩缩集群。
费用 R-WRU 的费用比常规 WRU 高 50%。 您需要为每个集群的节点和存储空间付费。
区域复制在可用区之间进行,不会产生网络复制费用。
当复制跨区域或跨大陆时,会产生费用。
服务等级协议 (SLA) 99.999% 99.999%

数据平面

下表比较了 DynamoDB 和 Bigtable 的数据模型概念。表格中的每一行都描述了类似的功能。 例如,DynamoDB 中的项类似于 Bigtable 中的行。

DynamoDB Bigtable
商品: 一组属性,可通过其主键在所有其他商品中唯一标识。允许的大小上限为 400 KB。 行: 由行键标识的单个实体。 允许的大小上限为 256 MB。
不适用 列族:用户指定的用于对列进行分组的命名空间。
属性: 名称和值的组合。属性值可以是标量、集合或文档类型。属性大小本身没有明确的限制。不过,由于每个商品的大小上限为 400 KB,因此对于只有一个属性的商品,该属性的大小上限为 400 KB 减去属性名称所占的大小。 列限定符: 列族中列的唯一标识符。列的完整标识符表示为 column-family:column-qualifier。列限定符在列族中按字典顺序排序。

列限定符的大小上限为 16 KB。


单元格:单元格包含给定行、列和时间戳的数据。一个单元格包含一个值,该值的大小不得超过 100 MB。
主键: 表中商品的唯一标识符。它可以是分区键或复合键。

分区键:由一个属性组成的简单主键。此属性用于确定相应商品所在的物理分区。允许的大小上限为 2 KB。

排序键:用于确定分区中各行的排序方式的键。允许的大小上限为 1 KB。

复合键:由两个属性(分区键和排序键或范围属性)组成的主键。
行键: 表中项的唯一标识符。 通常由值和分隔符的串联表示。 允许的大小上限为 4 KB。

列限定符可用于实现与 DynamoDB 的排序键等效的行为。

复合键可以使用串联的行键和列限定符来构建。

如需了解详情,请参阅本文档“架构设计”部分中的架构翻译示例。

存留时间: 每个商品的相应时间戳用于确定何时不再需要该商品。在指定时间戳的日期和时间之后,系统会从表中删除相应项目,而不会消耗任何写入吞吐量。 垃圾回收: 每个单元格的时间戳可确定何时不再需要某个项。垃圾回收会在称为压缩的后台进程中删除过期项。垃圾回收政策是在列族级设置的,不仅可以根据项的年龄删除项,还可以根据用户希望保留的版本数量删除项。在确定集群规模时,您无需考虑压缩所需的容量。
全局二级索引: 一种包含基表中选定属性的表,按与基表不同的主键进行整理。索引键无需包含表中的任何键属性。它不必与表具有相同的键架构。DynamoDB 会异步更新全局二级索引。 异步二级索引: 如需使用不同的查找模式或属性查询相同的数据,您可以创建异步二级索引。此类索引包含来自基表的所选属性。这些属性按与表自身键不同的键进行整理。此行为类似于 DynamoDB 全局二级索引。

运维

通过数据平面操作,您可以对表中的数据执行创建、读取、更新和删除 (CRUD) 操作。下表比较了 DynamoDB 和 Bigtable 的类似数据平面操作。

DynamoDB Bigtable
CreateTable CreateTable
PutItem
BatchWriteItem
MutateRow
MutateRows
Bigtable 将写入操作视为更新插入操作。
UpdateItem
  • 条件写入
  • 递增和递减