地理分区概览

本页介绍了地理分区,并说明了其在 Spanner 中的运作方式。

Spanner 提供了区域级实例配置和多区域实例配置,这让您可以跨地理位置复制数据。借助地理分区,您可以进一步对不同实例配置中数据库表内的行数据进行细分和存储。

优势和用例

借助地理分区,您可以对数据库中的行进行分区,从而获得以下优势:

  • 全球数据库中的区域性延迟时间:通过使用地理分区,Spanner 可在分布在不同地理位置的单个统一数据库中管理您的数据,同时确保区域访问具有较低的延迟时间。与管理多个分片数据库相比,使用地理分区可以简化操作并降低复杂性。
  • 全球数据库功能:地理分区可提供全球事务、区域间数据移动以及跨地理区域强制执行唯一性等数据库功能。
  • 数据驻留合规性:Spanner 在部署级别提供数据驻留承诺。如需了解详情,请参阅使用地理分区的数据库的数据驻留兼容性

以下是常见的使用场景:

  • 与用户相关的数据:对与用户相关的数据进行地理分区,以便在距离用户最近的区域处理和存储数据。

  • 本地化数据:特定于地点的信息,例如交通和特殊活动。

地理分区的运作方式

所有 Spanner 实例都有一个主实例分区,称为 default 分区。如果您不创建其他分区,则所有数据库对象都存储在默认分区中,该分区与实例配置位于同一位置。如果您想对数据库中的数据进行分区,则必须在实例中创建其他分区。

如需在数据库中使用地理分区,请执行以下操作:

  1. 在实例中创建其他分区。这些由用户创建的分区各有自己的配置(单区域或多区域)和节点数。

  2. 按照常规方式创建数据库。数据库具有与实例的默认分区关联的默认分块位置。

  3. 在数据库中创建位置,并将其与其他分区相关联。您的数据库可以与在同一实例中创建的其他分区进行交互。

  4. 创建具有展示位置键属性的展示位置表。您必须在 DML 语句中使用放置键来指定行数据位于哪个分区中。如果您在数据库中创建非放置表,Spanner 会将这些数据存储在默认分区中。

展示位置表中每行的展示位置键必须分配给以下任一项:

  • 与为该数据库定义的某个用户创建的展示位置的名称匹配的值;或者

  • 展示位置键值 default,用于在默认展示位置中存储数据。

如需了解如何使用分区,请参阅创建和管理分区

重要注意事项

在创建分区、展示位置和展示位置表之前,请考虑以下事项:

  • 分区位置:仔细选择对您的应用最有益的分区区域。

    虽然您可以在使用单区域实例配置的实例中创建分区,但我们建议您在使用多区域实例配置的实例中创建分区,以便默认分区位置也采用多区域配置。

    此外,请选择一个多区域默认分区位置,其中包含读写区域和只读区域,这些区域涵盖应用所需的所有管辖区。然后,创建其他分区(可以是区域性分区),并为其指定与多区域默认分区中的主副本区域匹配的主副本区域。

  • 分区数量:分区数量过多可能会导致开销,而分区数量过少可能无法带来足够的好处。每个实例最多可以创建 10 个分区。

限制

预览版期间,存在以下限制,并可能会在正式版发布时或之后发生更改或移除:

  • 您无法使用双区域配置创建实例分区。
  • 对于每个分区,计算容量必须至少为 1 个节点(1, 000 个处理单元)。
  • 对于给定实例,您不能创建多个使用相同基本实例配置的实例分区。例如,在 test-instance 中,您不能创建两个分区(partition-1partition-2),这两个分区都使用 us-central1 作为分区配置。
  • 对于分区中的每个节点,您最多可以放置 1 亿个放置行。您可以在 Google Cloud 控制台的“分区”页面上查看放置在每个分区中的展示位置行的数量。
  • 对于目标实例分区中的每个节点,Spanner 每秒可以移动大约 10 行放置行。
  • 您无法在免费试用实例或小于一个节点(1,000 个处理单元)的精细实例中创建分区。
  • 您无法为包含分区的实例创建备份。
  • 您无法对包含分区的实例使用客户管理的加密密钥
  • 您无法在启用了托管式自动扩缩器的实例中创建实例分区。
  • 您无法将分区移至其他实例配置。
  • 您无法移动包含分区的实例。(您可以将单个行移至不同的分区,这样就无需移动实例。)
  • 使用分区并不能保证符合法规要求。
  • 变更数据流不支持分区数据。
  • 如需使用地理分区,您必须创建一个新的空数据库,并将 opt_in_dataplacement_preview 选项设置为 true。如需了解详情,请参阅创建和管理分区
  • 如果您对展示位置表使用 INSERTDELETE DML 语句,则该语句必须是事务中的唯一语句。
  • 在读写事务模式下,您只能在 WHERE 子句中引用展示位置表的主键。如果您需要在 WHERE 子句中引用展示位置表的非主键列,则可以使用以下替代方案之一:
    • 如果您只需要只读权限,请改用只读事务模式。
    • 如果您需要进行更新,请使用分区 DML 事务模式,或在只读事务查询中查找主键,然后在单独的读写事务中引用 WHERE 子句中返回的主键。
  • 您无法使用命名架构

使用 IAM 进行访问权限控制

您需要拥有 spanner.instancePartitions.createspanner.instancePartitions.updatespanner.instancePartitions.delete 权限才能创建和管理分区。如果您只需查看分区,则需要拥有 spanner.instancePartitions.listspanner.instancePartitions.get 权限。如需了解详情,请参阅 IAM 概览

如需了解如何授予 Spanner IAM 权限,请参阅应用 IAM 权限

监控

Spanner 提供了多个指标来帮助您监控分区。创建其他分区后,您会在 Google Cloud 控制台的“系统数据分析”页面上看到一个额外的分区下拉式过滤条件。默认选择是显示所有分区的指标。您可以使用下拉菜单过滤特定分区的指标。

如需详细了解如何监控 Spanner 资源,请参阅使用 Cloud Monitoring 监控实例

价格

使用地理分区无需额外付费。系统会根据实例使用的计算容量和数据库使用的存储空间量,按标准 Spanner 价格向您收费。

如需了解详情,请参阅 Spanner 价格

后续步骤