As sequências do PolarDB-X geram valores numéricos globalmente únicos e sequencialmente incrementais do tipo MySQL BIGINT (inteiros com sinal de 64 bits). Use-as como valores de coluna de chave primária ou de chave de índice único.
O PolarDB-X oferece duas formas de usar sequências:
Sequência explícita: crie e gerencie uma sequência com instruções DDL e chame
SELECT seq.nextvalpara recuperar valores (ondeseqé o nome da sequência).Sequência implícita: adicione o atributo
AUTO_INCREMENTa uma coluna de chave primária. O PolarDB-X cria e mantém a sequência subjacente automaticamente. Consulte AUTO_INCREMENT.
Escolha um tipo de sequência
O PolarDB-X disponibiliza três tipos de sequência. Antes de analisar cada tipo, use esta tabela para escolher a opção mais adequada à sua carga de trabalho.
|
New sequence |
Group sequence |
Time sequence |
|
|
Globally unique |
Sim |
Sim |
Sim |
|
Consecutive |
Sim |
Não |
Não |
|
Monotonically increasing |
Sim |
Não |
Apenas no nível macro |
|
Crescimento monotônico na mesma sessão |
Sim |
Sim |
Sim |
|
Tipos de dados suportados |
Todos os tipos inteiros |
Todos os tipos inteiros |
Apenas BIGINT |
|
Legibilidade |
Alta |
Alta |
Baixa |
|
Capacidade de unitização |
Não |
Sim |
Não |
|
Compromisso de desempenho |
Depende do Global Meta Service (GMS); consome mais recursos do GMS |
Alto desempenho; sem ponto único de falha |
Desempenho excelente; sem armazenamento persistente de valores |
Quando usar cada tipo:
New sequence — use em bancos de dados no modo AUTO com versão de kernel V5.4.14 ou posterior. Este é o tipo padrão quando nenhum outro é especificado.
Group sequence — use em bancos de dados no modo DRDS (padrão nesse modo) ou para aplicações multiunidade que exigem valores globalmente únicos em várias instâncias ou bancos de dados. Também serve como caminho de migração das group sequences do PolarDB-X 1.0.
Time sequence — use apenas ao migrar aplicações do PolarDB-X 1.0 que dependem de valores de sequência baseados em tempo.
As new sequences dependem do GMS e consomem mais recursos desse serviço do que os outros tipos. Se sua carga de trabalho não tolerar essa dependência, use uma group sequence.
Conceitos principais
Consecutivo — cada valor corresponde exatamente a n + 1 em relação ao valor anterior n. Se qualquer valor for ignorado, a sequência não será consecutiva.
Crescimento monotônico — cada valor é estritamente maior que o anterior.
Crescimento monotônico no nível macro, mas não monotônico no nível micro — os valores apresentam tendência geral de alta, porém não seguem uma ordem estrita em granularidade fina. Exemplo: 1, 3, 2, 4, 5, 7, 6, 8, ...
Capacidade de unitização — uma group sequence pode abranger múltiplas instâncias ou bancos de dados, divididos em unidades. Cada unidade ocupa um subconjunto não sobreposto do espaço da sequência, o que garante valores globalmente únicos em todas as unidades.
New sequences
Uma new sequence gera valores globalmente únicos, consecutivos e monotonicamente crescentes. Por padrão, os valores são números naturais que começam em 1.
Exemplo (valor inicial: 100.000):
100000, 100001, 100002, 100003, 100004, ..., 199999, 200000, 200001, 200002, 200003, ...
Requisitos de versão:
Versão de kernel V5.4.14 ou posterior: se nenhum tipo de sequência for especificado em um banco de dados no modo AUTO, o sistema cria uma new sequence por padrão.
Versão de kernel V5.4.17 ou posterior: suporta os parâmetros INCREMENT BY, MAXVALUE e CYCLE / NOCYCLE.
Para limites, consulte New sequences.
Group sequences
Uma group sequence gera valores numéricos naturais globalmente únicos. Os valores não precisam ser consecutivos nem monotonicamente crescentes.
Por padrão (sem especificação dos parâmetros UNIT COUNT ou INDEX), uma group sequence possui uma única unidade e valor inicial padrão de 100.001. Para criar uma group sequence multiunidade, defina UNIT COUNT com um valor maior que 1.
Funcionamento das sequências multiunidade:
A quantidade de unidades determina o espaço total da sequência.
Cada unidade é identificada por um parâmetro INDEX e possui um subconjunto não sobreposto do espaço da sequência.
Como duas unidades nunca compartilham o mesmo valor de INDEX, os valores gerados por unidades diferentes jamais colidem.
Motivo para valores não consecutivos: o PolarDB-X usa vários nós para gerar valores de group sequence. O sistema busca um segmento de valores do banco de dados por vez. Em cenários como desconexões de rede, nem todos os valores de um segmento são usados, e os valores não utilizados são descartados. Esse comportamento representa o compromisso necessário para garantir alta disponibilidade e ausência de ponto único de falha.
Exemplo (valor inicial especificado: 100.000; o valor inicial real pode ser diferente):
200001, 200002, 200003, 200004, 100001, 100002, 100003, 200005, 200006, ...
Neste exemplo, o valor inicial real é 200.001, e não 100.000, pois as group sequences não garantem o início exato no valor especificado. Os intervalos entre 200.004 e 100.001, bem como entre 100.003 e 200.005, representam lacunas de valores não utilizados.
Para limites, consulte Group sequences.
Time sequences
Um valor de time sequence codifica três componentes: timestamp, ID do nó e número de série. Os valores são globalmente únicos e crescem monotonicamente no nível macro. As atualizações não exigem leitura do banco de dados, pois o PolarDB-X armazena apenas o nome e o tipo da sequência, sem guardar o valor atual. Isso confere excelente desempenho às time sequences.
Exemplos de valores:
776668092129345536, 776668098018148352, 776668111578333184, 776668114812141568, ...
Restrições:
Os valores não são consecutivos.
Os parâmetros START WITH, INCREMENT BY, MAXVALUE, CYCLE e NOCYCLE não têm efeito sobre time sequences.
Se uma time sequence estiver associada a uma coluna autoincrementável, essa coluna deve ser do tipo BIGINT.