暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB分布式版的自动分区与手动分区

酷数据库 2023-07-24
591

自动分区

自动分区,指创建表时不指定任何分区定义(如分区键、分区策略等),PolarDB分布式版能够自动选择分区键并对表及其索引进行水平分区的功能。AUTO模式数据库支持自动分区,而DRDS模式数据库不支持。

示例如下:

使用标准的MySQL语法创建tb表,语法上不包含任何分区定义:

CREATE TABLE tb(a INT, b INT, PRIMARY KEY(a));
复制
  • 上述DDL在DRDS模式数据库中创建出来的表是一张单表(如下图所示,默认不分区):456789

    执行SHOW语句,查看完整建表语句:

    SHOW FULL CREATE TABLE tb \G
    *************************** 1. row ***************************
           Table: tb
    Create Table: CREATE TABLE `tb` (
        `a` int(11) NOT NULL,
        `b` int(11) DEFAULT NULL,
        PRIMARY KEY (`a`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
    1 row in set (0.02 sec)
    复制
  • 上述DDL在AUTO模式数据库建来的表将是一分区表(如下图所示,默认按主键自动分区):456789执行SHOW语句,查看完整建表语句:


    SHOW FULL CREATE TABLE tb \G
    *************************** 1. row ***************************
           TABLE: tb
    CREATE TABLE: CREATE PARTITION TABLE `tb` (
        `a` int(11) NOT NULL,
        `b` int(11) DEFAULT NULL,
        PRIMARY KEY (`a`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
    PARTITION BY KEY(`a`)
    PARTITIONS 16
    1 row in set (0.01 sec)
    复制

因此,在AUTO模式数据库下,只需要使用标准的MySQL建表语法(包括建索引语法等)创建表,PolarDB分布式版的自动分区功能可以让应用便捷地享受到分布式数据库所带来的弹性伸缩、分区管理等诸多红利。

手动分区

手动分区,即创建表时显式指定分区定义(如分区键、分区策略等)。AUTO模式数据库与DRDS模式数据库采用手动分区时的建表语法不同。

  • AUTO模式数据库:创建表使用标准的MySQL分区表语法,并支持HASH、RANGE、LIST等多种分区策略。

    如下示例,创建tb表时使用PARTITION BY HASH(a)语法,指定了分区键a列及HASH的分区策略:

    CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a))
        -> PARTITION by HASH(a) PARTITIONS 4;
    Query OK, 0 rows affected (0.83 sec)
    
    SHOW FULL CREATE TABLE tb\G
    *************************** 1. row ***************************
           TABLE: tb
    CREATE TABLE: CREATE TABLE `tb` (
        `a` int(11) NOT NULL,
        `b` int(11) DEFAULT NULL,
        PRIMARY KEY (`a`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
    PARTITION BY KEY(`a`)
    PARTITIONS 4
    1 row in set (0.02 sec)
    复制
  • DRDS模式数据库:创建表使用DRDS专用的分库分表语法,仅支持使用HASH策略。

    如下示例,创建tb表时使用DBPARTITION BY HASH(a) TBPARTITION BY HASH(a)语法,指定分库分表键为a列:

    CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a))
        -> DBPARTITION by HASH(a)
        -> TBPARTITION by HASH(a)
        -> TBPARTITIONS 4;
    Query OK, 0 rows affected (1.16 sec)
    
    SHOW FULL CREATE TABLE tb\G
    *************************** 1. row ***************************
           Table: tb
    Create Table: CREATE TABLE `tb` (
        `a` int(11) NOT NULL,
        `b` int(11) DEFAULT NULL,
        PRIMARY KEY (`a`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4  dbpartition by hash(`a`) tbpartition by hash(`a`) tbpartitions 4
    1 row in set (0.02 sec)
    复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论