本页介绍了如何在数据库中创建和管理分块点。您可以创建分块点来预分块数据库,以便为预计的流量增加做好准备。如需详细了解预分块,请参阅预分块概览。
准备工作
-
如需获得创建和管理分屏点所需的权限,请让您的管理员为您授予实例的 Cloud Spanner Database Admin (
roles/spanner.databaseAdmin
) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色包含创建和管理分屏点所需的
spanner.databases.addSplitPoints
权限。 本页中的 gcloud CLI 示例进行如下假设:
- 您已设置 gcloud CLI 以与 Spanner 搭配使用。如果您刚开始将 gcloud CLI 与 Spanner 搭配使用,请参阅使用 gcloud CLI 创建和查询数据库。
您已为项目配置了 gcloud CLI。例如:
gcloud config set core/project PROJECT_ID
确保您的 Spanner 实例有足够的节点来支持预计的流量增加。如需了解详情,请参阅预分屏概览。
创建分屏点
您可以使用 Google Cloud CLI 或 REST API 创建分屏点。
gcloud
如果您想使用 Google Cloud CLI 创建分屏点,则需要创建一个包含所有分屏点的文件,并在 gcloud CLI 命令中提供该路径。文件不得超过 API 上限(每项 API 请求 100 个点)。如需了解详情,请参阅配额和限制。
该文件必须使用以下格式指定分屏点:
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
创建文件时,请替换以下变量:
- ObjectType:您要添加分块的对象类型。有效值为
TABLE
和INDEX
。 - ObjectName:数据库表或索引的名称。
- SplitValue:您要引入分块的分块点值。
在文件中创建分屏点值时,请遵循以下规则:
- 字符串值需要用单引号括起来。例如
'splitKeyPart'
。 - 布尔值必须为
true
或false
。 INT64
和NUMERIC
Spanner 数据类型值需要用单引号括起来。例如'123'
或'99.99'
。- 所有其他数值都需要不带单引号地写出。例如
1.287
。 - 时间戳值应采用
'2020-06-18T17:24:53Z'
格式并用单引号括起来。 - 拆分值需要用括号括起来。
- 分屏键值顺序必须与主键顺序相同。
- 如果拆分值需要包含英文逗号,您必须使用 `\` 字符对英文逗号进行转义。
- 对于分块索引,您可以提供索引键,也可以提供整个索引和完整的表键。
- 指定分屏点时,必须始终使用完整键。
以下示例文件展示了如何指定分屏点:
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9d̦b22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey
(123,'ab\,c')
在使用下面的命令数据之前,请先进行以下替换:
- SPLITS_FILE:分块文件的路径。
- INSTANCE_ID:实例 ID。
- DATABASE_ID:数据库 ID。
-
EXPIRATION_DATE:(可选)分屏点的到期日期。接受
'2020-06-18T17:24:53Z'
格式的时间戳。 - INITIATOR:(可选)分屏点的发起者。
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID\ --split-expiration-date=EXPIRATION_DATE\ --initiator=INITIATOR\
Windows (PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID` --split-expiration-date=EXPIRATION_DATE` --initiator=INITIATOR`
Windows (cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID^ --split-expiration-date=EXPIRATION_DATE^ --initiator=INITIATOR^
REST v1
您可以使用 projects.instances.databases.addSplitPoints
方法创建分屏点。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- INSTANCE_ID:实例 ID。
- DATABASE_ID:数据库 ID。
HTTP 方法和网址:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
请求 JSON 正文:
{ "split_points": [ { "table": "T1", "index": "T1_IDX", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 3 ] } }, { "key_parts": { "values": [ 10 ] } } ] }, { "table": "T2", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 50 ] } } ] } ] }
如需发送您的请求,请展开以下选项之一:
您应该会收到一个成功的状态代码 (2xx) 和一个空响应。
客户端库
Go
Java
Node.js
Python
可能出现的错误场景
在以下情况下,创建分屏点时可能会出现错误:
- 索引级分块的输入中包含错误的表名称。
- 表级分块点有多个键。
- 索引级分块点有两个以上的键。
- 分块点是在数据库架构中未定义的表或索引上定义的。
- 请求包含重复的分屏点。
如需了解配额和限制,请参阅配额和限制。
查看拆分点
您可以使用Google Cloud 控制台或 gcloud CLI 查看数据库中创建的所有分块点:
控制台
如需通过在 Google Cloud 控制台中查询 SPANNER_SYS.USER_SPLIT_POINTS
视图来获取分屏点数,请执行以下操作:
打开 Spanner 实例页面。
选择要查询的 Spanner 实例和数据库的名称。
点击左侧导航面板中的 Spanner Studio。
在文本字段中输入以下查询:
SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTS
点击运行查询。
系统会显示类似以下内容的结果:
TABLE_NAME | INDEX_NAME | INITIATOR | SPLIT_KEY | EXPIRE_TIME |
---|---|---|---|---|
T | CloudAddSplitPointsAPI | T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-06T09:58:58.007201Z | |
T | T_IDX | CloudAddSplitPointsAPI | 索引:T 上的 T_IDX,索引键:(10),主表键:(<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) | 2025-03-08T07:33:23.861682Z |
T | T_IDX | CloudAddSplitPointsAPI | 索引:T 上的 T_IDX,索引键:(9091),主表键:(4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-08T07:35:25.990007Z |
gcloud
运行以下 gcloud CLI 命令可查看数据库中的分块点:
gcloud spanner databases splits list DATABASE_ID \
--instance INSTANCE_ID
运行此命令时,请替换以下变量:
- INSTANCE_ID:Spanner 实例 ID。
- DATABASE_ID:Spanner 数据库 ID。
系统会显示类似以下内容的响应:
TABLE_NAME: T
INDEX_NAME:
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-06T09:58:58.007201Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>)
EXPIRE_TIME: 2025-03-08T07:33:23.861682Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (9091), Primary Table Key: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-08T07:35:25.990007Z
如何使分屏点失效
您可以为创建的每个分屏点设置过期时间。如需了解详情,请参阅分屏点过期。您可以使用 Google Cloud CLI 或 REST API 使分屏点失效。
gcloud
如果您想在 Google Cloud CLI 中使分块点失效,则需要创建一个包含要失效的所有分块的文件,并在 gcloud CLI 命令中使用 splits-file
参数提供其路径。文件不得超过 API 上限(每项 API 请求 100 个点)。如需了解详情,请参阅配额和限制。
该文件必须使用以下格式指定分屏点:
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
创建文件时,请替换以下变量:
- ObjectType:您要过期的分块的对象类型。有效值为
TABLE
和INDEX
。 - ObjectName:数据库表或索引的名称。
- SplitValue:您要过期的分屏点值。
在文件中创建分屏点值时,请遵循以下规则:
- 字符串值需要用单引号括起来。例如
'splitKeyPart'
。 - 布尔值可以是
true
或false
。 INT64
和NUMERIC
Spanner 数据类型值需要用单引号括起来。例如'123'
或'99.99'
。- 所有其他数值都需要不带单引号地写出。例如
1.287
。 - 时间戳值应采用
'2020-06-18T17:24:53Z'
格式并用单引号括起来。 - 拆分值需要用括号括起来。
- 分屏键值顺序必须与主键顺序相同。
- 如果拆分值需要包含英文逗号,您必须使用 `\` 字符对英文逗号进行转义。
- 对于分块索引,您可以提供索引键,也可以提供整个索引和完整的表键。
- 指定分屏点时,必须始终使用完整键。
以下示例文件展示了如何指定分屏点:
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9db22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey
(123,'ab\,c')
在使用下面的命令数据之前,请先进行以下替换:
- SPLITS_FILE:分块文件的路径。
- INSTANCE_ID:实例 ID。
- DATABASE_ID:数据库 ID。
-
EXPIRATION_DATE:(可选)分屏点的到期日期。接受
'2020-06-18T17:24:53Z'
格式的时间戳。 - INITIATOR:(可选)分屏点的发起者。
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID\ --split-expiration-date=EXPIRATION_DATE\ --initiator=INITIATOR\
Windows (PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID` --split-expiration-date=EXPIRATION_DATE` --initiator=INITIATOR`
Windows (cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID^ --split-expiration-date=EXPIRATION_DATE^ --initiator=INITIATOR^
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- INSTANCE_ID:实例 ID。
- DATABASE_ID:数据库 ID。
HTTP 方法和网址:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
请求 JSON 正文:
{ "split_points": [ { "table": "T1", "index": "T1_IDX", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 3 ] } }, { "key_parts": { "values": [ 10 ] } } ] }, { "table": "T2", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 50 ] } } ] } ] }
如需发送您的请求,请展开以下选项之一:
您应该会收到一个成功的状态代码 (2xx) 和一个空响应。