地理分区概览

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

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

优势和用例

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

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

以下是常见的应用场景:

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

  • 本地化数据:特定于地点的信息,例如流量和特别活动。

地理分区的运作方式

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

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

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

  2. 像往常一样创建数据库。数据库具有与实例的默认实例分区关联的默认放置位置。

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

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

必须为放置表中每一行的放置键分配以下任一项:

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

  • 放置键值 default,用于将数据存储在默认放置位置。

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

重要注意事项

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

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

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

    此外,请选择一个多区域默认实例分区位置,其中包含读写和只读区域,这些区域涵盖了应用所需的所有管辖区。然后,创建其他实例分区(可以是区域级分区),其主要区域与多区域默认实例分区中的区域一致。

  • 实例分区的数量:实例分区过多可能会导致开销过大,而实例分区过少则可能无法提供足够的优势。每个实例最多可以创建 10 个实例分区。

限制

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

  • 您无法使用双区域配置创建实例分区。
  • 对于每个实例分区,计算容量必须至少为一个节点 (1,000 个处理单元)。
  • 对于给定实例,您无法创建多个使用相同基本实例配置的实例分区。例如,在 test-instance 内,您无法创建两个都使用 us-central1 作为实例分区配置的分区,即 partition-1partition-2
  • 对于实例分区中的每个节点,您最多可以放置 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 价格

后续步骤