您可以通过创建混合分区(Hybrid Partition)的方式来访问存储在不同引擎中的数据。
混合分区原理如下图所示:
混合分区的基本原理是将分区表中的分区存储在不同的存储介质上,以达到冷热数据分离管理的目的。比如将热数据存储在本地PFS上,冷数据存储在OSS上,这样可以极大地降低冷数据的存储成本,且不影响热数据的查询性能,也不影响对热数据执行DML操作。
创建混合分区表功能目前处于灰度阶段。如需使用,请前往配额中心,根据配额IDpolardb_mysql_hybrid_partition
找到配额名称,在对应的操作列单击申请来开通该功能。
前提条件
集群版本需为PolarDB MySQL版8.0.2版本且Revision version为8.0.2.2.5及以上。您可以通过查询版本号来确认集群版本。
OSS上已存在需要创建的分区的数据文件,且数据文件名称需要符合以下命名规则:
扩展名和分区标记需大写。
表名和分区名与数据库中的名称保持一致。
示例:假设表
t1
的p1
分区为CSV引擎,则该分区的数据文件命名为:t1#P#p1.CSV
。
注意事项
创建的混合分区表至少需要包含一个在InnoDB引擎上创建的分区。
创建包含二级分区的混合分区表时,一级分区的引擎必须和表的引擎保持一致,且二级分区至少需要包含一个在InnoDB引擎上创建的分区。
混合分区表的分区类型目前仅支持
RANGE
和LIST
类型。暂不支持对混合分区表中的OSS分区执行DML操作(包括
INSERT
、UPDATE
、DELETE
和LOAD
)。集群版本为PolarDB MySQL版8.0.2.2.17版本及以上时,支持对混合分区表执行ADD和DROP操作。其它版本暂不支持对混合分区表执行ADD和DROP操作。
参数说明
使用混合分区表时,您可以根据实际使用场景在PolarDB集群的参数配置中设置以下参数。
参数 | 说明 |
loose_hybrid_partition_query_mix_engine_enabled | 查询混合分区表时,是否查询非InnoDB引擎中的分区数据。取值如下:
|
创建混合分区
您可以通过已有的OSS Server来创建混合分区,如果当前不存在OSS Server,您可以通过以下语法来创建OSS Server:
CREATE SERVER oss_server_name
FOREIGN DATA WRAPPER oss
OPTIONS(EXTRA_SERVER_INFO '{"oss_endpoint": "<my_oss_endpoint>",
"oss_bucket": "<my_oss_bucket>", "oss_access_key_id": "<my_oss_access_key_id>",
"oss_access_key_secret": "<my_oss_access_key_secret>", "oss_prefix":"<my_oss_prefix>", "oss_sts_token": "<my_oss_sts_token>"}');
集群版本为PolarDB MySQL版8.0.2版本且Revision version为8.0.2.2.6及以上时,支持使用my_oss_sts_token
参数。
参数说明如下表所示:
参数 | 类型 | 备注 |
oss_server_name | 字符串 | OSS server名称。 说明 该参数为全局参数,且全局唯一。该参数不区分大小写,最大长度不超过64个字符,超过64个字符的名称会被自动截断。您可以将OSS server名称指定为带引号的字符串。 |
my_oss_endpoint | 字符串 | OSS对应区域的域名。 说明 如果是从阿里云的主机访问数据库,应该使用内网域名(即带有“internal”的域名),避免产生公网流量。 |
my_oss_bucket | 字符串 | 数据文件所在OSS的bucket,需要通过OSS预先创建。 |
my_oss_access_key_id | 字符串 | OSS账号ID。 |
my_oss_access_key_secret | 字符串 | OSS账号KEY。 |
my_oss_prefix | 字符串 | OSS路径前缀。用于指定数据文件的存放路径。不能包含特殊字符,也不能为空。 |
my_oss_sts_token | 字符串 | OSS临时访问凭证。获取OSS临时访问凭证详情请参见获取临时访问凭证。 说明
|
创建混合分区表,示例如下:
CREATE TABLE t2(a1 INT, a2 VARCHAR(30), a3 VARCHAR(256))
CONNECTION = "oss_server_name"
PARTITION BY RANGE(a1)
(
PARTITION p1 values less than (1000) ENGINE = CSV,
PARTITION p2 values less than (2000) ENGINE = CSV,
PARTITION p3 values less than (3000) ENGINE = INNODB
);
查询混合分区
您可以通过以下两种方式来查询不同引擎的分区数据。
在控制台将
hybrid_partition_query_mix_engine_enabled
参数设置为ON,执行查询语句时,查询结果中就会包含非InnoDB分区的数据。示例如下:SELECT * FROM t1;
其中,
t1
表示需要查询的混合分区表。在控制台将
hybrid_partition_query_mix_engine_enabled
参数设置为OFF,查询指定分区中的数据。示例如下:SELECT * FROM t1 partition (p1);
其中,
t1
表示需要查询的混合分区表,p1
表示需要查询的分区。