O particionamento HASH distribui os dados uniformemente entre as partições por meio do algoritmo de hash consistente MurmurHash3. Este tópico descreve a política de particionamento HASH para bancos de dados PolarDB-X no modo de particionamento automático. Diferentemente do particionamento KEY, o particionamento HASH aceita funções de particionamento em chaves de partição de coluna única, o que permite controlar como os valores são transformados antes da aplicação do hash.
Para uma comparação lado a lado entre o particionamento HASH e o particionamento KEY, consulte a tabela Comparação entre particionamento KEY e particionamento HASH na visão geral dos tipos de partição.
O algoritmo de roteamento do particionamento HASH no PolarDB-X é diferente do MySQL.
Sintaxe
CREATE TABLE ...
PARTITION BY HASH(partition_expr)
PARTITIONS number;
partition_expr aceita uma das seguintes formas:
|
Forma |
Descrição |
Exemplo |
|
|
Uma ou mais colunas de chave de partição |
|
|
|
Função de particionamento aplicada a uma única coluna |
|
Funções de particionamento suportadas
TO_DAYS, TO_MONTHS, TO_WEEKS, TO_SECOND, UNIX_TIMESTAMP, MONTH, DAYOFWEEK, DAYOFMONTH, DAYOFYEAR, SUBSTR, SUBSTRING, RIGHT, LEFT
As funções de particionamento aplicam-se apenas a chaves de partição de coluna única. Não há suporte para funções de particionamento aninhadas.
Observações de uso
Funções de particionamento são suportadas somente para chaves de partição de coluna única. Os tipos de dados aceitos nas colunas da chave de partição variam conforme a função de particionamento utilizada.
Chaves de partição vetoriais (multicoluna) não aceitam funções de particionamento.
O particionamento HASH não oferece suporte à divisão de partições de dados quentes.
Por padrão, uma tabela particionada pode conter até 8.192 partições.
Uma chave de partição pode ser composta por até cinco colunas, por padrão.
Caso uma coluna da chave de partição utilize um tipo sensível ao fuso horário, como
TIMESTAMP, aplique a função de particionamentoUNIX_TIMESTAMPnessa coluna.
Exemplos
Uso de função de particionamento
Particione pela coluna birthday (tipo DATETIME) utilizando TO_DAYS para converter valores de data em contagem de dias antes de aplicar o hash. A tabela será dividida em 8 partições.
CREATE TABLE tb_h_fn(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY HASH(TO_DAYS(birthday))
PARTITIONS 8;
Uso de chave de partição de coluna única
Particione diretamente pela coluna id. A tabela será dividida em 8 partições.
CREATE TABLE tb_h(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY HASH(id)
PARTITIONS 8;
Uso de chave de partição vetorial
Particione pelas colunas id e bid simultaneamente. A tabela será dividida em 8 partições.
CREATE TABLE tb_h2(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY HASH(id, bid)
PARTITIONS 8;
Ao utilizar uma chave de partição vetorial, a eliminação de partição aplica-se apenas a consultas que incluam condições de igualdade em todas as colunas da chave de partição. Neste exemplo, a consulta deve filtrar tanto por id quanto por bid para se beneficiar da eliminação de partição.
Limitações
Tipos de dados suportados
|
Categoria |
Tipos |
|
Inteiro |
|
|
Data e hora |
|
|
String |
|
Distribuição de dados e seleção da chave de partição
O particionamento HASH utiliza o MurmurHash3, um algoritmo de hash consistente com baixas taxas de colisão e alto desempenho. No entanto, o MurmurHash3 não garante uma distribuição equilibrada quando a chave de partição possui poucos valores distintos.
A distribuição torna-se equilibrada quando o número de valores distintos da chave de partição ultrapassa 3.000. Quanto maior a quantidade de valores distintos, mais uniforme será a distribuição entre as partições.