本页介绍了如何创建和管理 Spanner 本地群组。您可以使用位置组为数据库架构中的数据定义分层存储政策。如需了解分层存储的工作原理,请参阅分层存储。
创建地理区域组
您可以创建没有任何分层存储政策的本地化组,也可以创建本地化组来为数据库架构中的数据定义存储政策。
控制台
前往 Google Cloud 控制台中的 Spanner 实例页面。
选择要使用分层存储空间的实例。
选择要使用分层存储空间的数据库。
在导航菜单中,点击 Spanner Studio。
在 Spanner Studio 页面上,点击
New tab(新建标签页),或使用空白编辑器标签页。使用 GoogleSQL 或 PostgreSQL 输入
CREATE LOCALITY GROUP
DDL 语句。例如,您可以运行以下命令来创建一个位置组
separate_storage
,该组会将列存储在与其余列的数据不同的文件中:GoogleSQL
CREATE LOCALITY GROUP separate_storage;
PostgreSQL
CREATE LOCALITY GROUP separate_storage;
例如,您可以运行以下命令,创建一个在 SSD 存储空间上存储数据的本地性组
ssd_only
:GoogleSQL
CREATE LOCALITY GROUP ssd_only OPTIONS (storage='ssd');
PostgreSQL
CREATE LOCALITY GROUP ssd_only STORAGE 'ssd';
例如,您可以运行以下命令,创建一个将数据存储在 HDD 存储空间上的本地性组
hdd_only
:GoogleSQL
CREATE LOCALITY GROUP hdd_only OPTIONS (storage='hdd');
PostgreSQL
CREATE LOCALITY GROUP hdd_only STORAGE 'hdd';
点击运行。
gcloud
如需使用 gcloud CLI 命令创建位置信息组,请使用 gcloud spanner databases ddl update
。
例如,您可以运行以下命令来创建一个位置组 separate_storage
,该组会将列存储在与其余列的数据不同的文件中:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP separate_storage"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP separate_storage"
例如,您可以运行以下命令,创建一个在 SSD 上存储数据的本地性组 ssd_only
:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP ssd_only OPTIONS (storage='ssd')"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP ssd_only STORAGE 'ssd'"
例如,您可以运行以下命令,创建一个将数据存储在 HDD 存储空间上的本地性组 hdd_only
:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP hdd_only OPTIONS (storage='hdd')"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP hdd_only STORAGE 'hdd'"
为地理位置群组创建基于年龄的政策
采用基于存在时间的政策的本地群组会将较新的数据在 SSD 存储空间中存储指定时间。指定时间过后,Spanner 会在其正常压缩周期(通常在指定时间后的 7 天内)将数据迁移到 HDD 存储空间。使用基于时长的分层存储政策时,数据在 SSD 中存储的最短时间为 1 小时,之后才会移至 HDD 存储空间。
如需创建基于年龄的地区组,请使用 CREATE LOCALITY GROUP
DDL 语句。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
CREATE LOCALITY GROUP
DDL 语句。例如,以下 DDL 语句会创建一个本地性分组
spill_to_hdd
,该分组会在前 10 天将数据存储在 SSD 存储空间上,然后在正常压缩周期内将较旧的数据迁移到 HDD 存储空间:GoogleSQL
CREATE LOCALITY GROUP spill_to_hdd OPTIONS (storage = 'ssd', ssd_to_hdd_spill_timespan = '10d');
PostgreSQL
CREATE LOCALITY GROUP spill_to_hdd STORAGE 'ssd' SSD_TO_HDD_SPILL_TIMESPAN '10d';
点击运行。
gcloud
如需使用 gcloud CLI 命令创建基于年龄的地区组,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个本地性分组 spill_to_hdd
,该分组会在前 10 天将数据存储在 SSD 中,然后在正常压缩周期内将较旧的数据迁移到 HDD。
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP spill_to_hdd OPTIONS (storage='ssd', ssd_to_hdd_spill_timespan='10d')"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE LOCALITY GROUP spill_to_hdd STORAGE 'ssd' SSD_TO_HDD_SPILL_TIMESPAN '10d'"
为数据设置分层存储政策
创建位置组后,您可以为数据设置分层存储政策。分层存储政策决定了数据使用的本地化组。您可以在数据库、表、列或次级索引级设置分层存储政策。除非明确替换,否则每个数据库对象都会从其父级继承分层存储政策。
设置数据库级别的本地性群组
默认的分层存储政策是将所有数据存储在 SSD 存储空间中。您可以通过更改 default
本地化组来更改数据库级分层存储政策。对于 GoogleSQL 方言数据库,您的 ALTER LOCALITY GROUP
DDL 语句必须在反引号 (`default`
) 中包含 default
。您只需为 default
本地化组添加反引号。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
ALTER LOCALITY GROUP
DDL 语句。例如,以下 DDL 语句会更改
default
本地化组,以使用基于年龄的分层存储空间政策。数据库中的所有数据都会在 10 天后移至 HDD 存储空间。GoogleSQL
ALTER LOCALITY GROUP `default` SET OPTIONS (storage = 'ssd', ssd_to_hdd_spill_timespan = '10d');
PostgreSQL
ALTER LOCALITY GROUP "default" STORAGE 'ssd' SSD_TO_HDD_SPILL_TIMESPAN '10d';
点击运行。
gcloud
如需使用 gcloud CLI 命令更改 default
位置信息组的分层存储空间政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会更改 default
本地化组,以使用基于年龄的分层存储空间政策。数据库中的所有数据都会在 10 天后移至 HDD 存储空间。
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP `default` SET OPTIONS (storage = 'ssd', ssd_to_hdd_spill_timespan = '10d');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP "default" STORAGE 'ssd' SSD_TO_HDD_SPILL_TIMESPAN '10d';"
设置表级别的本地性群组
您可以为数据设置表级分层存储政策,以替换数据库级分层存储政策。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
CREATE TABLE
DDL 语句。例如,以下 DDL 语句会创建一个使用本地群组
ssd_only
的表Singers
:GoogleSQL
CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId), OPTIONS (locality_group = 'ssd_only');
PostgreSQL
CREATE TABLE Singers ( SingerId bigint PRIMARY KEY, FirstName varchar(1024), LastName varchar(1024), SingerInfo bytea ) LOCALITY GROUP ssd_only;
点击运行。
gcloud
如需使用 gcloud CLI 命令设置表级分层存储政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个使用本地群组 ssd_only
的表 Singers
。
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Singers ( SingerId INT64 NOT NULL, \
FirstName STRING(1024), \
LastName STRING(1024), \
SingerInfo BYTES(MAX) \
) PRIMARY KEY (SingerId), OPTIONS (locality_group = 'ssd_only');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Singers ( \
SingerId bigint PRIMARY KEY, \
FirstName varchar(1024), \
LastName varchar(1024), \
SingerInfo bytea \
) LOCALITY GROUP ssd_only;"
设置列级替换分层存储政策
您可以为数据设置列级替换分层存储政策。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入包含列级替换分层存储策略的
CREATE TABLE
DDL 语句。例如,以下 DDL 语句会创建一个使用本地性组
ssd_only
的Singers
表。不过,Awards
列会替换此表级位置信息组,并使用spill_to_hdd
位置信息组作为其分层存储政策:GoogleSQL
CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), Awards ARRAY<STRING(MAX)> OPTIONS (locality_group = 'spill_to_hdd') ) PRIMARY KEY (SingerId), OPTIONS (locality_group = 'ssd_only');
PostgreSQL
CREATE TABLE Singers ( SingerId bigint PRIMARY KEY, FirstName varchar(1024), LastName varchar(1024), Awards varchar[] LOCALITY GROUP spill_to_hdd ) LOCALITY GROUP ssd_only;
点击运行。
gcloud
如需使用 gcloud CLI 命令设置列级替换分层存储政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个使用本地性组 ssd_only
的 Singers
表。不过,Awards
列会替换此表级分层存储空间政策,并使用 spill_to_hdd
本地化组作为其分层存储空间政策:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Singers ( \
SingerId INT64 NOT NULL, \
FirstName STRING(1024), \
LastName STRING(1024), \
Awards ARRAY<STRING(MAX)> OPTIONS (locality_group = 'spill_to_hdd') \
) PRIMARY KEY (SingerId), OPTIONS (locality_group = 'ssd_only');" \
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Singers ( \
SingerId bigint PRIMARY KEY, \
FirstName varchar(1024), \
LastName varchar(1024), \
Awards varchar[] LOCALITY GROUP spill_to_hdd \
) LOCALITY GROUP ssd_only;"
设置二级索引级别的替换分层存储空间政策
您可以为数据设置次级索引级替换分层存储政策。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入包含次级索引级替换分层存储策略的
CREATE INDEX
DDL 语句。例如,以下 DDL 语句会创建一个使用本地性组
ssd_only
的Singers
表。该数据库还针对数据库中的所有Singers
按名字和姓氏创建了辅助索引。SingersByFirstLastName
索引会替换表级分层存储政策,并使用spill_to_hdd
本地性组作为其分层存储政策:GoogleSQL
CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName) OPTIONS (locality_group = 'spill_to_hdd');
PostgreSQL
CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName) LOCALITY GROUP spill_to_hdd;
点击运行。
gcloud
如需使用 gcloud CLI 命令设置辅助索引级替换分层存储空间政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个使用本地性组 ssd_only
的 Singers
表。数据库还会按名字和姓氏为数据库中的所有 Singers
创建次级索引。SingersByFirstLastName
索引会替换表级分层存储政策,并使用 spill_to_hdd
本地性组作为其分层存储政策:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName) \
OPTIONS (locality_group = 'spill_to_hdd');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName) \
LOCALITY GROUP spill_to_hdd;"
设置列级本地性群组
您可以为数据设置列级本地性群组,即使该本地性群组没有分层存储政策也是如此。从此列读取数据的速度比从与其他列分组的数据读取数据的速度更快。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
输入使用 GoogleSQL 或 PostgreSQL 将列分配给某个本地化组的
CREATE TABLE
DDL 语句。例如,以下 DDL 语句会创建一个
Songs
表,其中包含一个在hdd_only
本地化组中单独存储的LyricsCompressed
列:GoogleSQL
CREATE TABLE Songs ( SingerId INT64 NOT NULL, SongId INT64 NOT NULL, Title STRING(MAX), Description STRING(MAX), LyricsCompressed BYTES(MAX) OPTIONS (locality_group = 'hdd_only') ) PRIMARY KEY (SingerId, SongId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE, OPTIONS (locality_group = 'ssd_only');
PostgreSQL
CREATE TABLE Songs ( SingerId BIGINT NOT NULL, SongId BIGINT NOT NULL, Title VARCHAR, Description TEXT, LyricsCompressed BYTEA LOCALITY GROUP hdd_only, PRIMARY KEY (SingerId, SongId) ) LOCALITY GROUP ssd_only INTERLEAVE IN PARENT Singers ON DELETE CASCADE;
点击运行。
gcloud
如需使用 gcloud CLI 命令为数据设置列级本地化组,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会创建一个 Songs
表,其中包含一个在 hdd_only
本地性组中单独存储的 LyricsCompressed
列:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Songs ( \
SingerId INT64 NOT NULL, \
SongId INT64 NOT NULL, \
Title STRING(MAX), \
Description STRING(MAX),
LyricsCompressed BYTES(MAX) OPTIONS (locality_group = 'hdd_only') \
) PRIMARY KEY (SingerId, SongId), \
INTERLEAVE IN PARENT Singers ON DELETE CASCADE, \
OPTIONS (locality_group = 'ssd_only');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="CREATE TABLE Songs ( \
SingerId BIGINT NOT NULL, \
SongId BIGINT NOT NULL, \
Title VARCHAR, \
Description TEXT, \
LyricsCompressed BYTEA LOCALITY GROUP hdd_only, \
PRIMARY KEY (SingerId, SongId) \
) LOCALITY GROUP ssd_only INTERLEAVE IN PARENT Singers ON DELETE CASCADE;
在存储选项之间移动数据
您可以在 SSD 和 HDD 存储空间之间移动数据。数据迁移最多可能需要 7 天。您可以通过查询内置的 SPANNER_SYS.TABLE_SIZES_STATS_1HOUR
表来监控迁移进度,以检查数据库中每个表的 HDD 和 SSD 存储用量。您还可以使用 Cloud Monitoring spanner.googleapis.com/instance/storage/used_bytes
指标来显示数据库或实例的 SSD 和 HDD 细分情况,从而监控存储空间使用情况。如需了解详情,请参阅分层存储可观测性。
将数据从 SSD 移动到 HDD 存储空间
如需将数据从 SSD 移动到 HDD 存储空间,您可以创建具有基于过期时间的分层存储政策的新位置群组,也可以更改现有位置群组的分层存储政策。从 SSD 迁移到 HDD 最多可能需要 7 天。如需了解详情,请参阅为地区组创建基于年龄的政策或更改存储选项。
将数据从 HDD 移动到 SSD 存储空间
如需将数据从 HDD 存储空间移至 SSD 存储空间,您可以更改现有本地化组的存储空间选项,或更改表所使用的本地化组。从 SSD 迁移到 HDD 最多可能需要 7 天。
更改表所使用的本地性组
您可以在表选项中设置新的或其他本地群组,以更改表所使用的本地群组。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
输入使用 GoogleSQL 或 PostgreSQL 更改表所用本地化组的
ALTER TABLE
DDL 语句。例如,以下 DDL 语句会将表
Singers
使用的本地化组更改为spill_to_hdd
:GoogleSQL
ALTER TABLE Singers SET OPTIONS (locality_group = 'spill_to_hdd');
PostgreSQL
ALTER TABLE Singers SET LOCALITY GROUP spill_to_hdd;
点击运行。
gcloud
如需使用 gcloud CLI 命令更改表所使用的本地化组,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会将表 Singers
使用的本地化组更改为 spill_to_hdd
:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER TABLE Singers SET OPTIONS(locality_group = 'spill_to_hdd');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER TABLE Singers SET LOCALITY GROUP spill_to_hdd;"
更改表列使用的本地性群组
您可以在列选项中设置本地群组,以更改表的列使用的本地群组。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
输入使用 GoogleSQL 或 PostgreSQL 更改表所用本地化组的
ALTER TABLE
DDL 语句。例如,以下 DDL 语句会将表的列
LastName
使用的本地群组更改为spill_to_hdd
:GoogleSQL
ALTER TABLE Singers ALTER COLUMN LastName SET OPTIONS(locality_group = 'spill_to_hdd');
PostgreSQL
ALTER TABLE Singers ALTER COLUMN LastName SET LOCALITY GROUP spill_to_hdd;
点击运行。
gcloud
如需使用 gcloud CLI 命令更改表所使用的本地化组,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会将表的列 LastName
使用的本地群组更改为 spill_to_hdd
:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER TABLE Singers ALTER COLUMN LastName SET OPTIONS(locality_group = 'spill_to_hdd');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER TABLE Singers ALTER COLUMN SET LOCALITY GROUP spill_to_hdd;"
更改地区组
您可以通过更改其存储选项或更改其基于存在时间的政策来更改地区组。
更改存储选项
您可以将某个可用区组的存储选项从 SSD 更改为 HDD,或从 HDD 更改为 SSD。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
ALTER LOCALITY GROUP
DDL 语句。例如,以下 DDL 语句会将本地化组
separate_storage
的存储选项更改为 HDD:GoogleSQL
ALTER LOCALITY GROUP separate_storage SET OPTIONS (storage='hdd');
PostgreSQL
ALTER LOCALITY GROUP separate_storage STORAGE 'hdd';
点击运行。
gcloud
如需使用 gcloud CLI 命令更改位置组的存储选项,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会将本地性组 separate_storage
的存储选项更改为 HDD:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP separate_storage SET OPTIONS (storage = 'hdd');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP separate_storage STORAGE 'hdd';"
更改基于存在时间的政策
您可以通过延长或缩短数据在 SSD 中存储到 HDD 存储空间之前的时间,来更改某个位置组的基于时长的政策。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
ALTER LOCALITY GROUP
DDL 语句。例如,以下 DDL 语句会将数据在 SSD 中存储的时长延长到 20 天,从而更改了本地化组
spill_to_hdd
的基于时长的政策:GoogleSQL
ALTER LOCALITY GROUP spill_to_hdd SET OPTIONS (ssd_to_hdd_spill_timespan = '20d');
PostgreSQL
ALTER LOCALITY GROUP spill_to_hdd SSD_TO_HDD_SPILL_TIMESPAN '20d';
点击运行。
gcloud
如需使用 gcloud CLI 命令更改地区组的年龄段政策,请使用 gcloud spanner databases ddl update
。
例如,以下 DDL 语句会将数据在 SSD 中存储的时长延长到 20 天,从而更改了基于时长的本地性组 spill_to_hdd
的政策:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP spill_to_hdd SET OPTIONS (ssd_to_hdd_spill_timespan = '20d');"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER LOCALITY GROUP spill_to_hdd SSD_TO_HDD_SPILL_TIMESPAN '20d';"
删除地理区域组
如果某个地区组包含数据,则无法将其删除。您必须先将该位置群组中的所有数据移至另一个位置群组。如需了解详情,请参阅更改表所使用的本地性群组。
控制台
- 在 Spanner Studio 页面上,点击 New tab(新建标签页),或使用空白编辑器标签页。
使用 GoogleSQL 或 PostgreSQL 输入
DROP LOCALITY GROUP
DDL 语句。例如,您可以运行以下命令来删除位置组
ssd_only
:GoogleSQL
DROP LOCALITY GROUP ssd_only;
PostgreSQL
DROP LOCALITY GROUP ssd_only;
点击运行。
gcloud
如需使用 gcloud CLI 命令删除某个位置组,请使用 gcloud spanner databases ddl update
。
例如,如需删除本地化组 ssd_only
,请运行以下命令:
GoogleSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="DROP LOCALITY GROUP ssd_only"
PostgreSQL
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="DROP LOCALITY GROUP ssd_only"
后续步骤
- 详细了解分层存储。
- 详细了解地区组。
- 详细了解如何使用时间戳谓词下推优化查询。