使用效果
PolarDB-X透明分布式的自动分区的工作模式,就是将一个逻辑库内的所有 MySQL单表(没有显式使用MySQL分区语法的表),默认按如下方式决定分区方案(如下图所示):
自动使用表的主键进行水平分区;
表的所有索引自动使用全局索引,并按索引列进行水平分区。
适用场景
由于该工作模式会对原有业务的所有MySQL单表实施自动分区,所以这种透明分布式的工作模式更适合于对性能要求不高的基于MySQL单机数据库开发的应用(比如,一些新开发的需要快速上线的应用)。通常,这类型而业务的库表数目不多,应用的查询场景相对简单(比如按表主键点查)。
在实际应用的过程中,关于透明分布式的自动分区工作模式的适用场景的细节,可以参考最佳实践。
使用示例
创建使用自动分区的数据库
在PolarDB-X中,要使用透明分布式的自动分区工作模式,可以使用以下的建库 SQL:
CREATE DATABASE autodb2 MODE='auto' DEFAULT_SINGLE='off';
目前AUTO库透明分布式的默认工作模式是自动分区,所以也可以直接使用以下的建库SQL:
CREATE DATABASE autodb2 MODE='auto';
创建多张MySQL单表并自动分区
可尝试使用以下的建表SQL,在my_autodb
内创建多张单表:
CREATE TABLE auto_t1(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id),
index idx_name(name)
);
查看自动分区表的完整建表SQL
mysql> CREATE TABLE auto_t1(
-> id bigint not null auto_increment,
-> bid int,
-> name varchar(30),
-> birthday datetime,
-> primary key(id),
-> index idx_name(name)
-> );
Query OK, 0 rows affected (2.44 sec)
mysql>
mysql> show full create table auto_t1\G
*************************** 1. row ***************************
Table: auto_t1
Create Table: CREATE PARTITION TABLE `auto_t1` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`bid` int(11) DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
GLOBAL INDEX /* idx_name_$6425 */ `idx_name` (`name`)
PARTITION BY KEY(`name`,`id`)
PARTITIONS 3,
LOCAL KEY `_local_idx_name` (`name`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY(`id`)
PARTITIONS 3
/* tablegroup = `tg3741` */
1 row in set (0.03 sec)
可见,原MySQL单表在PolarDB-X下自动分区,索引自动变成全局索引。
注意事项
必须是AUTO库才支持透明分布式自动分区模式(DRDS 库不支持),即建库 SQL 时必须指定 MODE='AUTO' ;
自动分区后,部分表的写入性能可能变会大,这是部分表原来的索引变成全局索引表,导致写入操作需要通过分布式事务维护全局索引表与主表的一致性。
文档内容是否对您有帮助?