本页面介绍了地理分区,并说明了它在 Spanner 中的运作方式。
Spanner 提供了单区域和多区域实例配置,这让您可以跨地理位置复制数据。借助地理分区,您可以进一步对不同实例配置中数据库表内的行进行细分和存储。
优势和用例
借助地理分区,您可以对数据库中的行进行分区,从而获得以下好处:
- 全球数据库中的区域延迟时间:Spanner 通过使用地理分区,在一个地理分布式位置的单个统一数据库中管理您的数据,同时确保区域访问延迟时间较短。与管理多个分片数据库相比,使用地理分区可以简化操作并降低复杂性。
- 全球数据库功能:地理分区提供了数据库功能,例如全局事务、区域间数据移动以及跨地理区域强制执行唯一性。
- 数据驻留合规性:Spanner 在放置级别提供数据驻留承诺。如需了解详情,请参阅使用地理分区的数据库的数据驻留兼容性。
以下是常见的应用场景:
与用户相关的数据:对与用户相关的数据进行地理分区,以便在距离用户最近的区域内处理和存储数据。
本地化数据:特定于地点的信息,例如流量和特别活动。
地理分区的运作方式
所有 Spanner 实例都有一个主实例分区,称为 default
实例分区。如果您不创建其他实例分区,所有数据库对象都将存储在默认分区中,该分区与您的实例配置位于同一位置。如果您想对数据库中的数据进行分区,则必须在实例中创建额外的实例分区。
如需在数据库中使用地理分区,请执行以下操作:
在实例中创建其他实例分区。 这些由用户创建的实例分区各有自己的配置(单区域或多区域)和节点数。
像往常一样创建数据库。数据库具有与实例的默认实例分区关联的默认放置位置。
在您的数据库中创建与其他实例分区关联的放置位置。您的数据库可以与在同一实例中创建的其他实例分区进行互动。
创建具有放置键属性的放置表。您必须在 DML 语句中使用放置键,来指定行数据位于哪个实例分区中。如果您在数据库中创建非放置表,Spanner 会将该数据存储在默认实例分区中。
必须为放置表中每一行的放置键分配以下任一项:
与为该数据库定义的用户创建的某个放置位置的名称匹配的值;或者
放置键值
default
,用于将数据存储在默认放置位置。
如需了解如何使用实例分区,请参阅创建和管理实例分区。
重要注意事项
在创建实例分区、放置位置和放置表之前,请考虑以下事项:
实例分区位置:仔细选择对您的应用最有利的实例分区区域。
虽然您可以在具有区域实例配置的实例中创建实例分区,但我们建议您在具有多区域实例配置的实例中创建实例分区,以便默认实例分区位置也位于多区域配置中。
此外,请选择一个多区域默认实例分区位置,其中包含读写和只读区域,这些区域涵盖了应用所需的所有管辖区。然后,创建其他实例分区(可以是区域级分区),其主要区域与多区域默认实例分区中的区域一致。
实例分区的数量:实例分区过多可能会导致开销过大,而实例分区过少则可能无法提供足够的优势。每个实例最多可以创建 10 个实例分区。
限制
在预览版期间,存在以下限制,并可能会在正式版发布时或之后发生更改或移除:
- 您无法使用双区域配置创建实例分区。
- 对于每个实例分区,计算容量必须至少为一个节点 (1,000 个处理单元)。
- 对于给定实例,您无法创建多个使用相同基本实例配置的实例分区。例如,在
test-instance
内,您无法创建两个都使用us-central1
作为实例分区配置的分区,即partition-1
和partition-2
。 - 对于实例分区中的每个节点,您最多可以放置 1 亿个放置行。您可以在 Google Cloud 控制台的“实例分区”页面上查看已放置在每个实例分区中的放置行数。
- 对于目标实例分区中的每个节点,Spanner 每秒可以移动大约 10 个放置行。
- 您无法在免费试用实例或小于一个节点(1,000 个处理单元)的细分实例中创建实例分区。
- 您无法为具有实例分区的实例创建备份。
- 您无法为具有实例分区的实例使用客户管理的加密密钥。
- 您无法在已启用托管式自动扩缩器的实例中创建实例分区。
- 您无法将实例分区移至其他实例配置。
- 您无法移动具有实例分区的实例。(您可以将单行移到不同的实例分区,因此无需移动实例。)
- 使用实例分区并不保证符合法规和监管要求。
- 变更数据流不支持分区数据。
- 如需使用地理分区,您必须创建一个新的空数据库,并将
opt_in_dataplacement_preview
选项设置为true
。如需了解详情,请参阅创建和管理实例分区。 - 如果您对放置表使用
INSERT
或DELETE
DML 语句,则该语句必须是事务中的唯一语句。 - 在读写事务模式下,您只能在
WHERE
子句中引用放置表的主键。如果您需要在WHERE
子句中引用放置表的非主键列,则可以使用以下任一替代方案:- 如果您只需要只读权限,请切换到只读事务模式。
- 如果您需要进行更新,请使用分区 DML 事务模式,或者在只读事务查询中查找主键,然后在单独的读写事务中引用
WHERE
子句中返回的主键。
- 您无法使用命名架构。
使用 IAM 进行访问权限控制
您需要具有 spanner.instancePartitions.create
、spanner.instancePartitions.update
和 spanner.instancePartitions.delete
权限,才能创建和管理实例分区。如果您只需要查看实例分区,则需要具有 spanner.instancePartitions.list
或 spanner.instancePartitions.get
权限。如需了解详情,请参阅 IAM 概览。
如需了解如何授予 Spanner IAM 权限,请参阅应用 IAM 权限。
监控
Spanner 提供了多种指标,可帮助您监控实例分区。创建其他实例分区后,您会在 Google Cloud 控制台的“系统洞察”页面上看到实例分区的其他下拉菜单过滤器。默认选择是显示所有实例分区的指标。您可以使用下拉菜单过滤特定实例分区的指标。
如需详细了解如何监控 Spanner 资源,请参阅使用 Cloud Monitoring 监控实例。
价格
使用地理分区无需额外费用。您需要根据实例使用的计算容量和数据库使用的存储空间支付标准 Spanner 价格。
如需了解详情,请参阅 Spanner 价格。
后续步骤
- 了解如何创建和管理实例分区。
- 了解如何创建和管理数据放置位置。