As sequences do PolarDB-X 1.0 geram valores numéricos globalmente únicos do tipo BIGINT do MySQL (inteiros com sinal de 64 bits). Use sequences para preencher colunas de chave primária e de índice único em nós distribuídos.
Escolha um tipo de sequence
O PolarDB-X 1.0 oferece quatro tipos de sequence. Escolha o tipo com base na necessidade de valores consecutivos, unicidade entre instâncias ou desempenho máximo da sua carga de trabalho.
|
Tipo |
Globalmente único |
Consecutivo |
Monotonicamente crescente |
Monotonicamente crescente na mesma sessão |
Sem ponto único |
Tipo de dados |
Legibilidade |
Unitização |
|
Group sequence (GROUP) |
Sim |
Não |
Não |
Sim |
Sim |
Todos os tipos inteiros |
Alta |
Não |
|
Unit group sequence (GROUP) |
Sim |
Não |
Não |
Sim |
Sim |
Todos os tipos inteiros |
Alta |
Sim |
|
Time-based sequence (TIME) |
Sim |
Não |
Apenas no nível macro |
Sim |
Sim |
Apenas BIGINT |
Baixa |
Não |
|
Simple sequence (SIMPLE) |
Sim |
Sim |
Sim |
Sim |
Não |
Todos os tipos inteiros |
Alta |
Não |
Selecione o tipo adequado ao seu requisito:
Maioria das cargas de trabalho — use uma group sequence. Este é o tipo padrão, oferece o melhor desempenho e elimina pontos únicos de falha (SPOFs). Os valores são globalmente únicos, mas podem apresentar lacunas.
Unicidade entre instâncias ou bancos de dados — adote uma unit group sequence. Ela estende a group sequence com capacidade de unitização para garantir valores únicos em múltiplas instâncias ou bancos de dados.
Inserções de alto throughput sem IDs consecutivos — prefira uma time-based sequence. O sistema não lê nem grava valores no banco de dados durante a geração, o que elimina sobrecarga de escrita. A sequence é monotonicamente crescente no nível macro, mas não no nível micro.
Valores estritamente consecutivos — use uma simple sequence apenas se a carga de trabalho exigir IDs monotonicamente crescentes e sem lacunas. Esse tipo grava cada valor gerado no armazenamento persistente, criando gargalos e riscos de SPOF. Reserve essa opção para casos em que IDs consecutivos são obrigatórios.
Conceitos principais
Compreender estes termos facilita a interpretação da tabela comparativa acima.
Consecutivo: Se o valor atual for n, o próximo deverá ser n + 1.
Monotonicamente crescente: Se o valor atual for n, o próximo deverá ser maior que n.
Monotonicamente crescente no nível macro, não monotônico no nível micro: A tendência geral é de crescimento, mas valores individuais podem chegar fora de ordem. Exemplo:
1, 3, 2, 4, 5, 7, 6, 8, ...Ponto único: Existe risco de ponto único de falha (SPOF).
Capacidade de unitização: Capacidade de gerar sequências numéricas únicas em várias instâncias ou bancos de dados.
Funcionamento de cada tipo de sequence
Group sequence (padrão)
Uma group sequence distribui a geração de valores entre vários nós DRDS. Cada nó recupera um segmento de valores do banco de dados por vez e atribui valores desse segmento localmente. Se ocorrer desconexão de rede ou encerramento de conexão antes do esgotamento do segmento, os valores restantes serão ignorados. Por isso, os valores da group sequence não são consecutivos.
Vantagens: Sem SPOF, excelente desempenho e suporte a todos os tipos de dados inteiros.
Limitações: Valores não consecutivos. O valor inicial real é sempre maior que o especificado em START WITH. Os valores não podem ser cíclicos.
Exemplo: Com START WITH 100000, uma group sequence pode gerar 200001, 200002, 200003, 200004, 100001, 100002, 100003.... Os valores entre 200004 e 100001 estão ausentes porque pertenciam a um segmento abandonado.
Unit group sequence
A unit group sequence funciona como uma group sequence, mas com capacidade de unitização. Configure índices de unidade e contagem de unidades para particionar o espaço global da sequence entre instâncias ou bancos de dados. Cada unidade ocupa um subconjunto não sobreposto do espaço, impedindo que o PolarDB-X gere o mesmo valor para duas unidades diferentes.
Requisitos para comportamento consistente:
Todas as unit group sequences que compartilham o mesmo espaço devem ter a mesma contagem de unidades.
Cada sequence deve ter um índice de unidade distinto.
Se configurar apenas uma unidade, o comportamento será idêntico ao de uma group sequence.
Vantagens: Todas as vantagens da group sequence, além de unicidade entre múltiplas instâncias ou bancos de dados.
Limitações: Valores não consecutivos. O valor inicial real é sempre maior que START WITH. Os valores não podem ser cíclicos.
As unit group sequences estão disponíveis no DRDS V5.2.7-1606682 e posteriores (lançado em 27 de abril de 2018) e no V5.3.3-1670435 e posteriores (lançado em 15 de agosto de 2018).
Time-based sequence
Uma time-based sequence compõe cada valor a partir de um timestamp, um ID de nó e um número serial. O sistema não lê nem grava no banco de dados ao gerar valores; apenas o nome e o tipo da sequence são armazenados. Isso torna as time-based sequences a opção de maior throughput.
Os valores são globalmente únicos e autoincrementais no nível macro. No nível micro, valores provenientes de nós concorrentes podem chegar ligeiramente fora de ordem.
Vantagens: Sem SPOF, excelente desempenho e nenhuma escrita no banco de dados durante a geração de valores.
Limitações: Valores não consecutivos. Os parâmetros START WITH, INCREMENT BY, MAXVALUE e CYCLE/NOCYCLE não são suportados. Quando utilizada em uma coluna AUTO_INCREMENT, a coluna deve ser do tipo BIGINT.
Exemplos de valores: 776668092129345536, 776668098018148352, 776668111578333184, 776668114812141568…
As time-based sequences estão disponíveis no DRDS V5.2.8-15432885 e posteriores (lançado em 27 de dezembro de 2018) e no V5.3.6-15439241 e posteriores (lançado em 29 de dezembro de 2018).
Simple sequence
Uma simple sequence grava cada valor gerado no armazenamento persistente do banco de dados. Isso garante valores globalmente únicos, consecutivos e monotonicamente crescentes. Mesmo após reinicialização causada por SPOF, a geração retoma a partir do último valor persistido.
Este é o único tipo compatível com INCREMENT BY, MAXVALUE e CYCLE/NOCYCLE.
Vantagens: Valores consecutivos e monotonicamente crescentes. Suporta valor máximo, tamanho de passo e geração cíclica.
Limitações: Suscetível a SPOFs, baixo desempenho e gargalos devido à escrita persistente em cada geração de valor. Use apenas quando IDs consecutivos forem obrigatórios.
Exemplo: Com START WITH 100000 e tamanho de passo 1, uma simple sequence gera 100000, 100001, 100002, 100003, 100004, ..., 200000, 200001, ... — sem lacunas, mesmo entre reinicializações.
Modos de uso
Independentemente do tipo, as sequences podem ser usadas em dois modos.
Sequence explícita: Crie e gerencie uma sequence com sintaxe DDL. Use
SELECT seq.nextvalpara recuperar o próximo valor, ondeseqé o nome da sequence. É possível consultar e modificar sequences explícitas independentemente.Implicit sequence: Adicione o atributo
AUTO_INCREMENTa uma coluna de chave primária. O PolarDB-X 1.0 cria e gerencia a sequence subjacente automaticamente.