全部产品
Search
文档中心

云原生数据库 PolarDB:创建混合分区

更新时间:Apr 26, 2024

您可以通过创建混合分区(Hybrid Partition)的方式来访问存储在不同引擎中的数据。

混合分区原理如下图所示:

image

混合分区的基本原理是将分区表中的分区存储在不同的存储介质上,以达到冷热数据分离管理的目的。比如将热数据存储在本地PFS上,冷数据存储在OSS上,这样可以极大地降低冷数据的存储成本,且不影响热数据的查询性能,也不影响对热数据执行DML操作。

说明

创建混合分区表功能目前处于灰度阶段。如需使用,请前往配额中心,根据配额IDpolardb_mysql_hybrid_partition找到配额名称,在对应的操作列单击申请来开通该功能。

前提条件

  • 集群版本需为PolarDB MySQL版8.0.2版本且Revision version为8.0.2.2.5及以上。您可以通过查询版本号来确认集群版本。

  • OSS上已存在需要创建的分区的数据文件,且数据文件名称需要符合以下命名规则:

    • 扩展名和分区标记需大写。

    • 表名和分区名与数据库中的名称保持一致。

    示例:假设表t1p1分区为CSV引擎,则该分区的数据文件命名为:t1#P#p1.CSV

注意事项

  • 创建的混合分区表至少需要包含一个在InnoDB引擎上创建的分区。

  • 创建包含二级分区的混合分区表时,一级分区的引擎必须和表的引擎保持一致,且二级分区至少需要包含一个在InnoDB引擎上创建的分区。

  • 混合分区表的分区类型目前仅支持RANGELIST 类型。

  • 暂不支持对混合分区表中的OSS分区执行DML操作(包括INSERTUPDATEDELETELOAD)。

  • 集群版本为PolarDB MySQL版8.0.2.2.17版本及以上时,支持对混合分区表执行ADDDROP操作。其它版本暂不支持对混合分区表执行ADDDROP操作。

参数说明

使用混合分区表时,您可以根据实际使用场景在PolarDB集群的参数配置中设置以下参数。

参数

说明

loose_hybrid_partition_query_mix_engine_enabled

查询混合分区表时,是否查询非InnoDB引擎中的分区数据。取值如下:

  • ON(默认):查询混合分区表时,查询非InnoDB引擎中的分区数据。

  • OFF:查询混合分区表时,不查询非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临时访问凭证详情请参见获取临时访问凭证

说明

my_oss_sts_token参数值有默认的过期时间。如果my_oss_sts_token已过期,您需要通过以下命令重置EXTRA_SERVER_INFO中的全部参数值。

ALTER SERVER server_name 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>"}');

创建混合分区表,示例如下:

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表示需要查询的分区。