Este tópico descreve como criar e usar tabelas particionadas de cluster multi-master.
Informações básicas
As tabelas particionadas de cluster multi-master do PolarDB for MySQL dividem automaticamente os dados em vários shards físicos dentro de um cluster, conforme regras de distribuição predefinidas. Assim, múltiplos nós de leitura e escrita compartilham a carga de trabalho da aplicação.
Com a divisão horizontal, o PolarDB escala horizontalmente a capacidade de processamento dos bancos de dados. Além disso, as tabelas particionadas de cluster multi-master aproveitam a alocação sob demanda de recursos do armazenamento compartilhado, melhorando a utilização dos recursos.
Escopo de aplicação
A série de produtos do cluster PolarDB for MySQL é Multi-master Cluster (Limitless) Edition e a versão do kernel é 8.0.2.
Uma conta privilegiada foi criada. Para mais informações, consulte Crie e gerencie contas de banco de dados.
Conexão estabelecida com o cluster de banco de dados. Para mais informações, consulte Connect to a cluster.
Instruções DDL
CREATE DATABASE
A instrução CREATE DATABASE cria um banco de dados e permite especificar seus atributos padrão, como conjunto de caracteres e collation. A sintaxe é totalmente compatível com o MySQL. Adicionalmente, use DIST_DB={'Y' | 'N'} para indicar se o banco de dados criado suporta tabelas particionadas de cluster multi-master no modo de sharding de banco de dados. O valor padrão é 'N'.
Atualmente, as tabelas particionadas de cluster multi-master não suportam a conversão de um banco de dados comum para um banco de dados com o atributo DIST_DB.
Sintaxe
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_option] ...
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name
| COLLATE [=] collation_name
| ENCRYPTION [=] {'Y' | 'N'}
| DIST_DB [=] {'Y' | 'N'}
}
Exemplos
Crie um banco de dados chamado test1 e permita a criação de tabelas particionadas de cluster multi-master nesse banco de dados.
CREATE DATABASE test1 DIST_DB='Y';
CREATE TABLE
Modo de sharding de banco de dados
A instrução CREATE TABLE cria tabelas. Em um banco de dados marcado como DIST_DB='Y', utilize DBDISTRIBUTION para especificar o método de distribuição das tabelas particionadas de cluster multi-master. Se o número de shards não for definido explicitamente, o sistema o determinará automaticamente com base na configuração do cluster.
Sintaxe
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[dbdistribution_options]
dbdistribution_options:
DBDISTRIBUTION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list)
| RANGE{(expr) | COLUMNS(column_list)}
| LIST{(expr) | COLUMNS(column_list)} }
[(dbdistribution_definition [, dbdistribution_definition] ...)]
dbdistribution_definition:
DBDISTRIBUTION distribution_name
[VALUES
{LESS THAN {(expr | value_list) | MAXVALUE}
|
IN (value_list)}]
[[STORAGE] ENGINE [=] engine_name]
[COMMENT [=] 'string' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] tablespace_name]
Exemplos:
-
Tabela única regular
CREATE database test; CREATE TABLE t1( id bigint NOT NULL, name varchar(30), PRIMARY key(id) ); -
Tabelas particionadas multi-master com suporte ao modo de sharding de banco de dados
Uso de função hash para divisão
Crie uma tabela particionada de cluster multi-master e utilize a coluna
idpara divisão por hash. Os shards de dados são distribuídos entre os nós de leitura e escrita do cluster.CREATE TABLE dist1( id bigint NOT NULL, c1 int, c2 varchar(30), PRIMARY key(id) ) dbdistribution BY hash(id);Sharding LIST
O tipo
listconsiste em uma coleção de listas de valores de enumeração, atendendo aos requisitos de sharding por enumeração. No shardinglist, utiliza-seDBDISTRIBUTION BY LIST(expr)para definição, ondeexpré a abreviação de expressão e representa o valor de uma coluna ou uma expressão baseada nesse valor. É necessário queexprretorne um valor inteiro. Em seguida, defina cada shard comVALUES IN (value_list), sendovalue_listuma lista de valores inteiros separados por vírgulas.CREATE TABLE t1 ( id INT NOT NULL, store_id INT, partition_no INT, PRIMARY key(id, partition_no) ) DBDISTRIBUTION BY LIST(partition_no) ( DBDISTRIBUTION a VALUES IN (1), DBDISTRIBUTION b VALUES IN (2) );Sharding LIST-COLUMNS
O sharding
list columnassemelha-se muito ao shardingliste é definido porDBDISTRIBUTION BY LIST COLUMNS(column_list), ondecolumn_listpode conter um ou mais nomes de colunas em vez de expressões. Na prática,columns()não aceita outras expressões além de nomes de colunas. O shardinglist columnsnão se limita mais a colunas inteiras. Os tipos aplicáveis incluem:Todos os tipos inteiros: TINYINT, SMALLINT, MEDIUMINT, INT (INTEGER) e BIGINT.
Outros tipos numéricos: DECIMAL e FLOAT, por exemplo, não são suportados.
Tipos de data: DATE e DATETIME.
Tipos de string: CHAR, VARCHAR, BINARY e VARBINARY. TEXT e BLOB não são suportados.
CREATE TABLE t3 ( id INT NOT NULL, store_id INT, partition_no varchar(20), PRIMARY key(id, partition_no) ) DBDISTRIBUTION BY LIST COLUMNS (partition_no) ( DBDISTRIBUTION a values in ('id_1'), DBDISTRIBUTION b values in ('id_2') );
ALTER TABLE
A sintaxe comum do MySQL para ALTER TABLE é suportada. Tabelas particionadas de cluster multi-master não permitem modificar regras de distribuição nem executar certas operações que exigem reorganização de shards. Para limites específicos, consulte os limites de desenvolvimento neste tópico.
CREATE INDEX
A sintaxe comum do MySQL para CREATE INDEX é suportada. Ao criar uma chave primária ou índice único, o índice deve conter todas as chaves de distribuição.
Consultas distribuídas
Tabelas particionadas de cluster multi-master suportam consultas de shard único e entre shards. Para consultas somente leitura entre shards, o sistema combina a capacidade de consulta distribuída com Global read-only nodes para executá-las. O comportamento real depende da configuração do cluster e do escopo de instruções SQL suportadas.
Colunas de incremento automático globais
Tabelas particionadas de cluster multi-master suportam sequências de incremento automático globalmente únicas. Quando vários nós de leitura e escrita gravam simultaneamente, podem ocorrer lacunas nos valores de incremento automático, sem garantia de que sejam consecutivos ou estritamente monotônicos crescentes. Ao projetar a lógica de negócios, não dependa da continuidade dos valores de incremento automático.
CREATE TABLE t1( id int NOT NULL auto_increment, c1 int, c2 int, PRIMARY key(id, c1)) dbdistribution BY RANGE (c1) ( dbdistribution p0 VALUES less than (100), dbdistribution p1 VALUES less than (1000), dbdistribution p2 VALUES less than (10000), dbdistribution p3 VALUES less than (20000) );
Query OK, 0 rows affected (0.26 sec)
INSERT INTO t1 (c1, c2) VALUES (1, 1);
Query OK, 1 row affected (0.04 sec)
Limites
Os seguintes limites aplicam-se apenas a tabelas particionadas de cluster multi-master:
|
Operação |
Restrição |
|
Modificação de regras ou chaves de distribuição |
Não suportado. Planeje adequadamente as chaves de distribuição ao criar tabelas. |
|
Operações de manutenção de shards |
Não há suporte para execução direta de operações como adicionar, excluir, mesclar ou reorganizar shards. |
|
Chaves primárias e índices únicos |
Devem conter todas as chaves de distribuição. |
|
Chaves estrangeiras e alguns índices especiais |
Atualmente não suportados. Verifique a compatibilidade de SQL antes de criar tabelas ou alterar estruturas de tabela. |
|
Operações relacionadas a tablespaces e diretórios de dados |
Atualmente não suportadas. |