AUTO模式核心特性及典型场景

热点分裂——有效解决数据热点

对于热点数据,PolarDB-X支持两种处理方式:

  • 第一种方案是将热点数据所在的分区数据迁移到特定的数据节点,让热点数据以独享存储资源的方式服务业务,能够实现热点数据不影响非热点数据的业务。具体操作步骤如下:

    1. 执行以下语句,将特定的热点数据提取到一个单独的分区。

      ALTER TABLEGROUP #tgName EXTRACT to PARTITION #hotPartitionName BY HOT VALUE(#keyVal)
    2. 执行以下语句,将这个单独的分区调度到指定的物理资源。

      ALTER TABLEGROUP #tgName MOVE PARTITIONS #hotPartitionName TO #dn
  • 如果热点数据突破了机器的单点性能,在PolarDB-X中可以对其采用第二种处理方法,通过以下命令将热点数据散列,更好的支持业务的线性扩展:

    ALTER TABLEGROUP #tgName SPLIT INTO PARTITIONS #hotPartitionNamePrefix #N BY HOT VALUE(#keyVal);              

    以上命令可以将keyVal对应的热点数据分裂成N份,并且将分裂后的分区名字加上指定的前缀,然后将新分裂后的分区均匀的调度到不同的数据节点,从而将热点数据在不同数据节点中线性分布,消除数据热点。

分区调度——更灵活的数据均衡

DRDS模式的分库分表使用的是按哈希取模的路由方式,分库与分表位置是强绑定的(即第n号分库必须包含第m号分表,这些库表对应关系不能修改)。这意味着,除非对全表数据进行rehash,否则所有分表都不能被分裂、合并与迁移。

由于分表不能随意的迁移到其他DN(数据节点),调度的基本单位就是一个分库,要调度必须整个分库一起调度,粒度很大,如果某个分库的数据量很大,不管怎么调度,DN之间都无法做到数据均衡。

465789

但是,AUTO模式的分区表由于采用了一致性哈希的路由算法,它的分区可以更灵活的进行合并、分裂与迁移,分区可以按需调度到指定的DN中,并且不会影响到不相关的分区数据。通过分区的合并分离等操作并结合分区调度,PolarDB-X可以将数据均匀的分布到各个DN中,从而实现DN间的数据均衡。

456789

TTL(Time To Live)——自动清理历史数据

某些业务场景下,业务数据增长的很快,并且业务数据的热度随着时间推移会有明显的降低。此时如果数据一直存储在PolarDB-X中,既会占用存储空间,也会降低正常业务查询的效率,此种场景很多业务会选择将历史数据归档后在PolarDB-X中删除,能快速的删除历史数据而不影响到现有业务,一直是客户所追求的。

如果PolarDB-X能通过DDL的方式删除历史数据,将极大的提高清理数据的速度,基于这种思路PolarDB-X在AUTO模式下开发出了TTL的功能,可以快速的删除历史数据,详情请参见什么是TTL功能

若在建表时使用TTL相关语法,则将创建一张TTL表。如下所示,将t_order表按照gmt_modified列进行时间分区,每个分区间隔一个月,每个分区12个月后过期,提前创建3个分区:

CREATE TABLE t_order (
  id bigint NOT NULL AUTO_INCREMENT,
  gmt_modified DATETIME NOT NULL,
  PRIMARY KEY (id, gmt_modified)
)
PARTITION BY HASH(id)
PARTITIONS 16
-- 以下为TTL的相关语法
LOCAL PARTITION BY RANGE (gmt_modified)  -- 按照gmt_modified列划分
INTERVAL 1 MONTH -- 每个月一个分区
EXPIRE AFTER 12 -- 数据在12个月后过期
PRE ALLOCATE 3;  -- 提前3个月创建分区

Locality——按需定制数据存储位置

在AUTO模式数据库中提供多个维度的Locality属性,可以手动定制数据的存储位置。

  • 可以通过设定Database的Locality属性,指定Database的存储位置,例如:

    CREATE DATABASE db1 MODE='AUTO' LOCALITY='dn=pxc-xdb-s-pxcexample'
  • 可以通过设定表级的Locality属性,指定表的存储位置。例如,默认情况下单表都存在一个DN上,而通过指定Locality属性,可以指定单表的物理位置。

    CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a)) LOCALITY='dn=pxc-xdb-s-pxcexample'
  • (即将在5.4.14版本支持)同时也支持分区级的Locality属性。例如,在涉及多个地域的业务场景下,结合AUTO模式下List分区,可以使一个地域的数据存在一个DN上:

    CREATE TABLE orders_region(
     id int,
     country varchar(64),
     city varchar(64),
     order_time datetime not null)
    PARTITION BY LIST COLUMNS(country,city)
    (
      PARTITION p1 VALUES IN (('China','Hangzhou'), ('China','Beijing')) LOCALITY='dn=pxc-xdb-s-pxcexample1',
      PARTITION p2 VALUES IN (('United States','NewYork'),('United States','Chicago')) LOCALITY='dn=pxc-xdb-s-pxcexample2',
      PARTITION p3 VALUES IN (('Russian','Moscow')) LOCALITY='dn=pxc-xdb-s-pxcexample3'
    );