Vista geral da migração de chaves primárias

Esta página descreve como o Spanner funciona com chaves principais e oferece estratégias de migração de chaves principais para os seguintes exemplos de utilização:

Uma abordagem típica às chaves principais é usar chaves substitutas, como números de incremento automático. Essas chaves primárias oferecem flexibilidade para otimizar as suas chaves agora e no futuro, mesmo que a lógica empresarial mude. Numa base de dados de instância única com um volume baixo, as chaves sequenciais têm um bom desempenho. No entanto, num sistema distribuído, as chaves sequenciais não são facilmente escaláveis.

Chaves principais sequenciais no Spanner

No Spanner, todas as tabelas têm uma chave principal composta por uma ou mais colunas da tabela. A chave principal da tabela identifica exclusivamente cada linha numa tabela. O Spanner usa a chave primária para distribuir grupos de linhas, denominados divisões, pelos nós de computação numa instância do Spanner. Isto chama-se divisão por intervalos e permite que o Spanner paralelize as consultas e seja escalável.

Quando tem linhas com chaves primárias cujos valores estão próximos, como chaves de incremento automático monótonas, tendem a ficar na mesma divisão. Isto pode criar uma paragem intensa, onde a divisão pode usar todos os recursos de computação e memória disponíveis. Um ponto de acesso pode resultar num aumento da latência, o que pode levar a limites de tempo e transações anuladas.

Para tirar partido da escalabilidade do Spanner e evitar pontos críticos, o Spanner oferece soluções incorporadas como alternativas às chaves primárias de incremento automático.

Recomendações de chaves principais

A recomendação predefinida para chaves primárias no Spanner é usar valores de identificador único universal versão 4 (UUIDv4). Os UUIDs são identificadores de 128 bits que usam 122 bits de dados aleatórios. Os valores UUIDv4 têm um grande intervalo de valores e são efetivamente únicos, independentemente de onde são gerados. Isto torna-as boas candidatas a chaves primárias sem pontos críticos no Spanner.

É recomendável usar chaves primárias de números inteiros, uma vez que ocupam menos espaço e reduzem a complexidade das alterações que tem de fazer à aplicação. Pode usar uma sequência de bits invertida positiva para gerar valores de chaves primárias únicos que se distribuem uniformemente pelo espaço de números inteiros de 64 bits positivos.

Para mais informações sobre como escolher uma chave principal para evitar pontos ativos, consulte as Práticas recomendadas de criação de esquemas.

Estratégias de migração

Consoante o exemplo de utilização e as necessidades da sua aplicação, pode implementar uma estratégia de migração de chaves principais. Cada uma destas estratégias de migração:

  • Garantir a fidelidade e a correção das chaves principais migradas.
  • Minimize as alterações da aplicação a jusante, como a alteração de tipos ou valores de chaves primárias.
  • Implemente as práticas recomendadas do Spanner para desempenho e escalabilidade.
  • O Spanner só altera o método de geração de novos dados e não afeta os dados existentes.

Migrar bases de dados de chaves UUID

Considere que está a migrar de uma base de dados que usa chaves principais UUID para o Spanner. Configure as chaves UUID existentes como strings na base de dados de origem e importe-as para o Spanner tal como estão. Os valores UUID, em particular a v4, são efetivamente únicos, independentemente de onde são gerados.

Pode usar a função GENERATE_UUID() (GoogleSQL, PostgreSQL) no Spanner para migrar bases de dados de chaves UUID.

Para instruções sobre a migração de bases de dados de chaves UUID, consulte o artigo Migre colunas de chaves UUID.

Migrar bases de dados de instância única com chaves sequenciais

Tenha em atenção que está a migrar de uma base de dados de instância única que usa chaves monótonas sequenciais, como AUTO_INCREMENT no MySQL, SERIAL no PostgreSQL ou o tipo IDENTITY padrão no SQL Server ou Oracle.

Configure o objeto SEQUENCE do Spanner para ignorar os valores no intervalo de chaves existentes e gerar novas chaves invertidas em bits. As chaves invertidas geradas pelo objeto SEQUENCE do Spanner são sempre superiores a zero e são distribuídas uniformemente no espaço de números inteiros positivos de 64 bits.

Para ver instruções sobre como migrar bases de dados com chaves sequenciais, consulte o artigo Migre chaves primárias sequenciais geradas automaticamente.

Migrar bases de dados de chaves sequenciais com suporte de transição em direto

Considere que está a migrar de uma base de dados de instância única que usa chaves monotónicas sequenciais para o Spanner e suporta cenários de replicação. Por exemplo, quer fazer uma transição em direto entre os sistemas de base de dados.

Configure o objeto SEQUENCE para ignorar todo o intervalo de valores das chaves existentes na base de dados de origem e gerar novas chaves invertidas em bits no Spanner. As chaves com bits invertidos geradas pelo objeto SEQUENCE do Spanner são sempre superiores a zero, mas não estão ordenadas.

Para obter instruções sobre como migrar bases de dados com suporte de transição em direto, consulte o artigo Use o Spanner e a sua base de dados de origem.

Migrar bases de dados de chaves sequenciais que tenham dependências de lógica de aplicação

Considere que está a migrar de uma base de dados que usa chaves monotónicas sequenciais e que a lógica da sua aplicação depende da ordem da chave primária para determinar a atualidade ou sequenciar dados recém-criados.

Crie uma chave composta que combine um valor distribuído uniformemente, como um ID de fragmento ou um hash, como o primeiro componente e um número sequencial como o segundo componente. Isto preserva os valores das chaves ordenados, sem causar um ponto de acesso à escala.

Para obter instruções sobre como migrar bases de dados de chaves sequenciais com dependências de lógica de aplicação, consulte o artigo Migre as suas próprias chaves primárias.

O que se segue?