Visão geral da migração de chave primária

Esta página descreve como o Spanner funciona com chaves primárias e oferece estratégias de migração de chaves primárias para os seguintes casos de uso:

Uma abordagem típica para chaves primárias é usar chaves alternativas, como números grandes. Essas chaves primárias oferecem flexibilidade para otimizar suas chaves agora e no futuro, mesmo que sua lógica de negócios mude. Em um banco de dados de instância única em volume baixo, e as teclas sequenciais têm bom desempenho. No entanto, em um sistema distribuído, chaves sequenciais não são bem dimensionadas.

Chaves primárias sequenciais no Spanner

No Spanner, cada tabela tem uma chave primária que consiste em um ou mais colunas da tabela. A chave primária da tabela identifica exclusivamente cada linha em uma tabela. O Spanner usa a chave primária para distribuir grupos de linhas, chamados de divisões, em nós de computação de uma instância do Spanner. Isso é chamado de fragmentação de intervalo e permite que o Spanner paralelize consultas e se escalone.

Quando você tem linhas com chaves primárias cujos valores estão próximos, como chaves de incremento automático monótono, elas tendem a cair na mesma divisão. Isso pode criar um ponto de acesso, em que a divisão pode usar toda a computação e memória disponíveis do Google Cloud. Um ponto de acesso pode resultar em aumento da latência, pode levar a tempos limite e transações canceladas.

Para aproveitar a escalonabilidade do Spanner e evitar pontos de acesso, O Spanner oferece soluções integradas como alternativas para chaves primárias com incrementabilidade automática.

Recomendações de chave primária

A recomendação padrão para chaves primárias no Spanner é usar valores da versão 4 do identificador universalmente único (UUIDv4). UUIDs são identificadores de 128 bits que usam 122 bits de dados aleatórios. Os valores de UUIDv4 têm uma enorme variedade de valores são efetivamente exclusivos, independentemente de onde sejam gerados. Isso faz com que eles bons candidatos para chaves primárias sem ponto de acesso no Spanner.

Você pode usar chaves primárias de números inteiros, pois elas ocupam menos espaço e reduzem o complexidade das mudanças do aplicativo que você terá que fazer. Você pode usar um sequência invertida em bits para gerar valores de chave primária únicos que uniformemente são distribuídos pelo espaço inteiro positivo de 64 bits.

Para mais informações sobre como escolher chave primária para evitar pontos de acesso, consulte as Práticas recomendadas de criação de esquema.

Estratégias de migração

Dependendo do caso de uso e das necessidades do seu aplicativo, é possível implantar uma chave primária estratégia de migração. Cada uma destas estratégias de migração:

  • Garanta a fidelidade e a exatidão das chaves primárias migradas.
  • Minimize alterações downstream no aplicativo, como alterações de tipos ou valores chave primária.
  • Implementar as práticas recomendadas do Spanner para desempenho e escalonabilidade.
  • O Spanner só muda o método de geração de novos dados, sem afetar os atuais.

Como migrar bancos de dados de chaves UUID

Considere que você está migrando de um banco de dados que usa chaves primárias UUID para o Spanner. Configure as chaves UUID atuais como strings no banco de dados de origem e importe-as no Spanner sem fazer mudanças. Valores de UUID, em especial a v4, são efetivamente exclusivos, independentemente de onde sejam gerados.

Você pode usar o Função GENERATE_UUID() (GoogleSQL, PostgreSQL) no Spanner para migrar bancos de dados de chaves UUID.

Para instruções sobre como migrar bancos de dados de chaves UUID, consulte Migrar colunas de chave UUID.

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

Considere que você está migrando de um banco de dados de instância única que usa chaves monotonicamente sequenciais, como AUTO_INCREMENT no MySQL, SERIAL no PostgreSQL ou o tipo padrão IDENTITY no SQL Server ou Oracle.

Configure o objeto SEQUENCE do Spanner para pular os valores no intervalo de chaves atuais e gerar novas chaves invertidas em bits. Chaves invertidas de bit geradas pelo objeto SEQUENCE do Spanner sejam sempre maiores que zero, e são distribuídos de maneira uniforme pelo espaço inteiro positivo de 64 bits.

Para instruções sobre como migrar bancos de dados que têm chaves sequenciais, consulte Migrar chaves primárias sequenciais geradas automaticamente.

Como migrar bancos de dados de chave sequenciais que têm suporte a transição em tempo real

Considere que você está migrando de um banco de dados de instância única que usa chaves monotonicamente sequenciais para o Spanner e oferece suporte a cenários de replicação. Por exemplo, você quer fazer uma transição ativa entre os sistemas de banco de dados.

Configure o objeto SEQUENCE do Spanner para pular todo o intervalo de valores de chaves existentes no banco de dados de origem e gerar novas chaves invertidas no Spanner. Bit reverteu chaves geradas pelo Spanner Os objetos SEQUENCE são sempre maiores do que zero, mas não são ordenados.

Para instruções sobre como migrar bancos de dados que têm suporte a transição em tempo real, consulte Usar o Spanner e o banco de dados de origem.

Como migrar bancos de dados de chaves sequenciais que têm dependências de lógicas de aplicativos

Considere que você está migrando de um banco de dados que usa chaves monotônicas sequenciais e seu aplicativo lógica depende da ordem da chave primária para determinar o tempo para retorno ou dados recém-criados em sequência.

Crie uma chave composta que combine um valor distribuído de maneira uniforme, como um ID de fragmento ou um hash, como o primeiro componente, e um número sequencial como o segundo componente. Isso preserva os valores-chave ordenados, sem causar um ponto de acesso em grande escala.

Para instruções sobre como migrar bancos de dados de chaves sequenciais com lógica do aplicativo dependências, consulte Migrar suas próprias chaves primárias.

A seguir