Este tópico apresenta e compara os bancos de dados nos modos AUTO e DRDS.
Modos de banco de dados do PolarDB-X
A partir da versão 5.4.13 do PolarDB-X, é possível criar um banco de dados no modo AUTO, também conhecido como banco de dados com particionamento automático. Esse modo oferece suporte ao particionamento automático, permitindo criar tabelas sem especificar uma chave de partição; os dados são distribuídos automática e uniformemente pelo cluster. Também é possível utilizar a sintaxe padrão de particionamento do MySQL para particionar manualmente as tabelas. Isso facilita o uso dos recursos de bancos de dados distribuídos, como distribuição transparente, auto scaling e gerenciamento de partições.
Bancos de dados em versões do PolarDB-X anteriores à 5.4.13 operam no modo DRDS. Esse modo não suporta particionamento automático. Ao criar uma tabela, use a sintaxe de sharding específica do DRDS para definir uma chave de sharding. Caso contrário, o sistema criará uma tabela não particionada.
O PolarDB-X 5.4.13 e versões posteriores suportam bancos de dados tanto no modo AUTO quanto no modo DRDS. Ambos podem coexistir na mesma instância.
Observações de uso
Para criar um banco de dados no modo AUTO, especifique explicitamente
MODE='AUTO'na instruçãoCREATE DATABASE.Se você omitir o parâmetro MODE na instrução
CREATE DATABASE, o PolarDB-X criará um banco de dados no modo DRDS por padrão.Em um banco de dados no modo AUTO, não é possível usar a sintaxe de sharding do DRDS para criar tabelas com sharding. Crie apenas tabelas particionadas.
Em um banco de dados no modo DRDS, não é possível usar a sintaxe de particionamento para criar uma tabela particionada. Crie apenas tabelas com sharding.
Clusters da Standard Edition não suportam a criação de bancos de dados no modo AUTO.
Especifique um modo de banco de dados
Ao criar um banco de dados no PolarDB-X, utilize o parâmetro MODE para definir o modo desejado.
Não é possível alterar o modo do banco de dados após a criação.
|
Parâmetro |
Valor |
Descrição |
Criação de banco de dados |
Criação de tabela |
|
MODE |
'AUTO' |
Crie um banco de dados no modo AUTO. |
Exemplo:
Para mais informações, consulte CREATE DATABASE. |
As tabelas criadas em um banco de dados no modo AUTO são chamadas de tabelas particionadas. Utilize a sintaxe padrão do MySQL. Para mais informações, consulte MySQL partitioned table syntax. |
|
'DRDS' (padrão) Nota
Se você não especificar o parâmetro MODE, o sistema criará um banco de dados no modo DRDS por padrão. |
Crie um banco de dados no modo DRDS. |
Exemplos:
Para mais informações, consulte CREATE DATABASE. |
As tabelas criadas em um banco de dados no modo DRDS são chamadas de tabelas com sharding. Para mais informações, consulte DRDS sharded table syntax. |
Particionamento automático e particionamento manual
Particionamento automático
O particionamento automático elimina a necessidade de definir qualquer configuração de partição, como chave ou política de particionamento, durante a criação da tabela. O PolarDB-X seleciona automaticamente uma chave de partição e particiona horizontalmente a tabela e seus índices. Bancos de dados no modo AUTO suportam particionamento automático, enquanto bancos de dados no modo DRDS não oferecem esse recurso.
Veja o exemplo a seguir.
Utilize a sintaxe padrão do MySQL para criar uma tabela chamada tb sem nenhuma definição de particionamento:
CREATE TABLE tb(a INT, b INT, PRIMARY KEY(a));
-
Em um banco de dados no modo DRDS, essa instrução DDL cria uma tabela não particionada.
Execute a instrução
SHOWpara visualizar a instrução completa de criação da tabela: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) -
Em um banco de dados no modo AUTO, essa instrução DDL cria uma tabela particionada. Execute a instrução
SHOWpara visualizar a instrução completa de criação da tabela: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)
O recurso de particionamento automático do PolarDB-X permite que sua aplicação aproveite facilmente as capacidades de um banco de dados distribuído, como auto scaling e gerenciamento de partições.
Particionamento manual
No particionamento manual, especifique explicitamente as definições de partição, como chave e política de particionamento, ao criar uma tabela. A sintaxe de criação de tabelas para particionamento manual difere entre bancos de dados nos modos AUTO e DRDS.
-
Banco de dados no modo AUTO: Utilize a sintaxe padrão do MySQL para criar uma tabela particionada. Este modo suporta diversas políticas de particionamento, incluindo HASH, RANGE e LIST.
No exemplo abaixo, a sintaxe
PARTITION BY HASH(a)define a colunaacomo chave de partição e HASH como política de particionamento para a tabelatb: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) -
Banco de dados no modo DRDS: Utilize a sintaxe de sharding específica do DRDS para criar uma tabela com sharding. Este modo suporta apenas a política HASH.
No exemplo abaixo, a sintaxe
DBPARTITION BY HASH(a) TBPARTITION BY HASH(a)define a colunaacomo chave de sharding para a tabelatb: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)
Comparação de algoritmos de roteamento: tabelas particionadas versus tabelas com sharding
A principal diferença entre tabelas particionadas e tabelas com sharding reside no algoritmo de roteamento.
O algoritmo de roteamento de uma tabela com sharding aplica uma operação de módulo sobre o valor de hash dividido pelo número de shards físicos da tabela. Se você alterar o número de partições (por exemplo, de 4 para 5), todos os dados precisarão ser reprocessados com hash. Por isso, tabelas com sharding no modo DRDS não suportam modificações no nível de partição.
O algoritmo de roteamento padrão para uma tabela particionada é um algoritmo de hash consistente baseado em intervalos. Esse algoritmo suporta nativamente alterações de partição por meio de operações como divisão e mesclagem, sem a necessidade de recalcular o hash de todos os dados. Consequentemente, tabelas particionadas no modo AUTO permitem modificações no nível de partição.
Comparação de recursos
Em comparação com um banco de dados no modo DRDS, um banco de dados no modo AUTO oferece novos recursos, como particionamento automático, divisão de dados quentes, agendamento de partições e Time to Live (TTL). Além disso, proporciona otimizações significativas na experiência distribuída em áreas como gerenciamento de partições e modificação de esquemas de particionamento.
A tabela a seguir compara os principais recursos dos bancos de dados nos modos AUTO e DRDS.
|
Recurso |
Modo AUTO |
Modo DRDS |
|
|
Distribuição transparente |
Particionamento padrão por chave primária |
Suportado. Se nenhum esquema de particionamento for definido durante a criação da tabela, o PolarDB-X particiona automaticamente a tabela pela chave primária. |
Não suportado. |
|
Índice secundário global (GSI) padrão |
Suportado. Se nenhuma coluna de particionamento for especificada para um índice, o PolarDB-X o particiona automaticamente pelas colunas do índice. |
Não suportado. |
|
|
Balanceamento de carga |
Suportado. |
Não suportado. |
|
|
Distribuição de dados quentes |
Suportado. |
Não suportado. |
|
|
Política de particionamento |
Particionamento por hash e por chave |
Suportado. Utiliza um algoritmo de hash consistente e suporta distribuição de dados quentes. |
Suportado. Utiliza um algoritmo de roteamento baseado em módulo, mas não suporta distribuição de dados quentes. |
|
Particionamento por intervalo e por colunas de intervalo |
Suportado, incluindo suporte para distribuição de dados quentes. |
Não suportado. |
|
|
Particionamento por lista e por colunas de lista |
Suportado. |
Não suportado. |
|
|
Chave de partição vetorial |
Suportado. Uma chave de partição pode ser um vetor, por exemplo, |
Não suportado. |
|
|
Collation da chave de partição |
Suportado. |
Não suportado. |
|
|
Tabela não particionada e tabela de broadcast |
Suportado. |
Suportado. |
|
|
Gerenciamento de partições |
Criação, exclusão e modificação de partições |
Suportado. |
Não suportado. |
|
Divisão e mesclagem de partições |
Suportado. |
Não suportado. |
|
|
Migração de partições |
Suportado. |
Não suportado. |
|
|
Truncamento de partições |
Suportado. |
Não suportado. |
|
|
Insights de partição |
Em breve. Este recurso oferecerá suporte à análise automática de partições quentes. |
Não suportado. |
|
|
Modificação do esquema de particionamento |
Alteração do tipo de tabela (conversão entre tabelas não particionadas, de broadcast e particionadas) |
Suportado. |
Suportado. |
|
Alteração da definição de partição (incluindo contagem de partições, tipo de chave de partição e política de particionamento) |
Suportado. |
Suportado. |
|
|
Auto scaling |
Suspensão de escrita durante o dimensionamento |
Não. |
Sim (brevemente). |
|
Permite outras operações DDL |
Sim. |
Não. |
|
|
Localidade |
Isolamento estático de armazenamento |
Suportado. Especifique recursos de armazenamento físico ao criar bancos de dados, tabelas e partições. |
Suportado. Especifique recursos de armazenamento físico ao criar bancos de dados e tabelas. |
|
Isolamento dinâmico de armazenamento |
Suportado. Ajuste dinamicamente os recursos de armazenamento físico para bancos de dados e tabelas. |
Não suportado. |
|
|
Compatível com auto scaling |
Sim. |
Não. |
|
|
Pruning de partição |
Pruning de partição baseado em prefixos |
Suportado. Por exemplo, se você particionar uma tabela usando |
Não suportado. |
|
Constant folding em expressões de cálculo |
Suportado. Por exemplo, o pruning de partição pode ser executado para uma condição com uma expressão de cálculo, como |
Não suportado. A condição da chave de partição deve ser uma constante, como |
|
|
Sensibilidade a maiúsculas/minúsculas e tratamento de espaços à direita no roteamento de partição |
Suportado. É possível especificar uma collation para a chave de partição a fim de determinar se o roteamento diferencia maiúsculas de minúsculas ou ignora espaços à direita. |
Não suportado. Não há suporte para collation em colunas de partição. O algoritmo HASH diferencia maiúsculas de minúsculas e não ignora espaços à direita. |
|
|
Pushdown de operação join |
Suportado. O pushdown de operação join não é afetado durante operações de partição, como divisão, mesclagem e migração. |
Suportado. |
|
|
Seleção de partição |
Suportado. É possível consultar uma partição específica usando a sintaxe de seleção de partição, por exemplo, |
Não suportado. |
|
|
Time to Live (TTL) |
Suportado. |
Não suportado. |
|
|
AUTO_INCREMENT |
Suportado. Garante que os valores sejam globalmente únicos, monotonicamente crescentes e consecutivos. |
Suportado. Garante que os valores sejam globalmente únicos, mas não assegura que sejam monotonicamente crescentes ou consecutivos. |
|
Comparação de desempenho
Tabelas com sharding no modo DRDS e tabelas particionadas no modo AUTO utilizam algoritmos de roteamento diferentes. Para avaliar as diferenças de desempenho, realizamos benchmarks no PolarDB-X com Sysbench. Este teste mede o throughput (em consultas por segundo, ou QPS) para cada modo em vários cenários de teste do Sysbench.
Ambiente de teste
-
Especificação da instância PolarDB-X: polarx.x4.2xlarge.2e
Nó de computação (CN): 2 × (16 núcleos de CPU, 64 GB RAM)
Nó de dados (DN): 2 × (16 núcleos de CPU, 64 GB RAM)
Versão: 5.4.13-16415631
-
Configurações da tabela:
-
Tabela particionada:
32 partições
Instrução de particionamento:
partition by hash(id) partitions 32Dados totais da tabela: 160 milhões de linhas
-
Tabela com sharding:
32 shards de tabela física
Instrução de sharding:
dbpartition by hash(id) tbpartition by hash(id) tbpartitions 16Dados totais da tabela: 160 milhões de linhas
-
Cenários de teste
Os testes Sysbench utilizam os seguintes cenários:
oltp_point_select: Consultas point-select com condições de igualdade na chave de partição.
oltp_read_only: Uma mistura de point-select transacional e consultas de pequeno intervalo (por exemplo, usando BETWEEN) na chave de partição.
oltp_read_write: Uma mistura de point-select transacional, consultas de pequeno intervalo e escritas na chave de partição.
Resultados do teste
Embora o algoritmo de hash consistente usado pelas tabelas particionadas seja mais complexo que o hash baseado em módulo das tabelas com sharding, o throughput no cenário
oltp_point_selecté praticamente idêntico, sem degradação significativa de desempenho.Nos cenários
oltp_read_onlyeoltp_read_write, que envolvem varreduras de intervalo complexas, as tabelas particionadas alcançam um throughput geral aproximadamente 33% maior. Essa melhoria deve-se às otimizações avançadas de pruning de partição disponíveis no modo AUTO.
Perguntas frequentes
-
P1: Quando devo escolher o modo AUTO em vez do modo DRDS?
R: Recomendamos o uso do modo AUTO tanto para novas aplicações quanto para aplicações migradas do PolarDB-X 1.0.
-
P2: No modo AUTO, devo usar particionamento automático ou manual ao criar tabelas?
R: Durante a fase de testes, use o particionamento automático. Se posteriormente descobrir que sua carga de trabalho exige ajustes de desempenho, altere o método de particionamento da tabela usando uma instrução DDL (por exemplo, a instrução
ALTER PARTITION). Caso tenha um conhecimento profundo dos padrões SQL específicos do seu negócio e das relações entre as tabelas, utilize o particionamento manual desde o início. -
P3: Como faço para alternar um banco de dados do modo DRDS para o modo AUTO?
R: Para versões de kernel 5.4.16 e posteriores, use qualquer um dos métodos a seguir. Para versões anteriores à 5.4.16, apenas o Método 2 e o Método 3 são suportados. Para verificar a versão da sua instância, consulte Visualize the engine version.
Método 1: A partir da versão 5.4.16, o kernel fornece a sintaxe
CREATE DATABASE LIKE/AS, que permite converter um banco de dados do modo DRDS para o modo AUTO com um único comando. Para detalhes de uso, consulte Convert a DRDS mode database to an AUTO mode database.Método 2: Crie um novo banco de dados no modo AUTO na instância de destino, crie as tabelas necessárias e use o Data Transmission Service (DTS) para sincronizar os dados do banco de dados original no modo DRDS para o novo banco de dados no modo AUTO.
Método 3: Use o comando
mysqldumppara exportar os dados do banco de dados original no modo DRDS (excluindo as instruções de criação de tabela). Em seguida, crie um novo banco de dados no modo AUTO, crie as tabelas e importe o arquivo de dados exportado usando o comandosource.
-
P4: Qual é o número padrão de partições para o particionamento automático no modo AUTO?
R: O número padrão de partições automáticas é calculado como: (Número de nós na criação da instância) × 8. Por exemplo, se uma instância for criada com 2 nós, o número padrão de partições será 2 × 8 = 16. Esse número permanece constante após a criação da instância e não é afetado pelo auto scaling, a menos que você ajuste manualmente o parâmetro correspondente.
-
P5: Posso ajustar manualmente o número padrão de partições automáticas?
R: Sim. O parâmetro para o número padrão de partições é AUTO_PARTITION_PARTITIONS, que é um parâmetro no nível da instância. Portanto, alterar esse parâmetro afeta o número de partições automáticas para todas as novas tabelas criadas em qualquer banco de dados no modo AUTO dentro dessa instância. Observe que, se a contagem de partições de uma nova tabela diferir da das tabelas existentes, o pushdown de operação join entre elas poderá falhar, o que pode afetar a eficiência da consulta. Recomendamos ajustar manualmente a contagem de partições, se necessário. Para mais informações, consulte Modify table-level partitions (AUTO mode).