A fragmentação comum de tabelas no PolarDB-X distribui automaticamente todas as tabelas de um banco de dados lógico entre vários nós de dados (DNs). Esse recurso elimina gargalos de recursos em servidores únicos e equilibra a carga de armazenamento e consultas em todo o cluster.
Para ativar esse recurso, defina DEFAULT_SINGLE='on' ao criar um banco de dados no modo AUTO.
Como funciona
O PolarDB-X define a distribuição de cada tabela com base na especificação de uma definição de partição do MySQL durante a criação da tabela:
|
Tipo de tabela |
Definição de partição |
Comportamento de distribuição |
|
Não particionada |
Não especificada |
Distribuição aleatória entre DNs para equilibrar cargas |
|
Particionada |
Especificada explicitamente |
Distribuição uniforme entre DNs |
Tabelas não particionadas são atribuídas aleatoriamente, portanto, o volume de dados por shard pode variar. Consequentemente, o espaço de armazenamento utilizado em cada DN pode ser diferente.
Quando usar
A fragmentação comum de tabelas é mais indicada nos seguintes cenários:
Sua aplicação utiliza um grande número de bancos de dados e tabelas.
A maioria das tabelas possui poucas ou nenhuma relação de JOIN entre si.
Caso suas tabelas realizem JOINs frequentes entre si, consulte a seção Limitações antes de ativar este recurso.
Criar um banco de dados com fragmentação comum de tabelas
Para ativar a fragmentação comum de tabelas, crie um banco de dados no modo AUTO com DEFAULT_SINGLE='on':
CREATE DATABASE autodb1 MODE='auto' DEFAULT_SINGLE='on';
Ao criar um banco de dados no modo AUTO pelo console do PolarDB, o SQL gerado pelo sistema não inclui DEFAULT_SINGLE='on'. Para utilizar a fragmentação comum de tabelas, execute manualmente o comando acima. Para mais detalhes, consulte CREATE DATABASE.
Parâmetros de criação do banco de dados
|
Parâmetro |
Descrição |
Valor |
|
|
Define o modo do banco de dados. Obrigatório para operação distribuída. |
|
|
|
Ativa a fragmentação comum de tabelas. Quando definido como |
|
Verifique se o banco de dados foi criado corretamente:
mysql> SHOW CREATE DATABASE autodb1;
Saída esperada:
+----------+------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE |
+----------+------------------------------------------------------------------------------------------------------------------+
| autodb1 | CREATE DATABASE `autodb1` CHARSET = `utf8mb4` COLLATE = `utf8mb4_general_ci` MODE = 'auto' DEFAULT_SINGLE = 'on' |
+----------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
Criar tabelas não particionadas
Crie tabelas em autodb1 sem especificar um esquema de partição. O PolarDB-X fragmenta e distribui essas tabelas automaticamente entre os DNs.
CREATE TABLE sin_t1(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t2(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t3(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t4(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
Verificar a distribuição das tabelas
Utilize SHOW TOPOLOGY FROM <table_name> para confirmar em qual DN cada tabela foi atribuída.
sin_t1:
SHOW TOPOLOGY FROM sin_t1\G
ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t1_HnMx
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default
sin_t2:
SHOW TOPOLOGY FROM sin_t2\G
ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t2_IT7l
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default
sin_t3:
SHOW TOPOLOGY FROM sin_t3\G
ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t3_HmtN
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default
sin_t4:
SHOW TOPOLOGY FROM sin_t4\G
ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t4_ab7e
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default
Os resultados demonstram que o PolarDB-X distribuiu as quatro tabelas entre dois DNs: sin_t1 e sin_t3 residem em polardbx-storage-0-master, enquanto sin_t2 e sin_t4 residem em polardbx-storage-1-master.
Limitações
Desempenho de JOIN
Após a fragmentação comum de tabelas, operações de JOIN entre tabelas fragmentadas podem ficar mais lentas. Como os dados estão distribuídos em diferentes DNs, os JOINs podem não ser enviados eficientemente para DNs individuais.
Para minimizar esse impacto, utilize a fragmentação comum de tabelas apenas para tabelas com poucas ou nenhuma relação de JOIN.
Distribuição desigual de armazenamento
Como as tabelas não particionadas são distribuídas aleatoriamente, o volume de dados por shard pode variar. Isso pode resultar em diferenças no espaço de armazenamento utilizado em cada DN.