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

Nesta página, descrevemos como o Spanner funciona com chaves primárias e ofertas estratégias de migração chave primária para os seguintes casos de uso:

Uma abordagem típica para chaves primárias é usar chaves substitutas, como números de incremento automático. 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 com baixo volume, as chaves sequenciais têm bom desempenho. No entanto, em um sistema distribuído, as chaves sequenciais não têm bom escalonamento.

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 é chamada fragmentação de intervalo, e permite que o Spanner carregue consultas em paralelo e escala.

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.

Principais recomendações da 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). Os UUIDs são identificadores de 128 bits que usam 122 bits de dados aleatórios. Os valores UUIDv4 têm uma grande variedade de valores e são efetivamente exclusivos, independentemente de onde são gerados. Isso as torna boas candidatas para chaves primárias sem hotspots 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 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 aplicativo, é possível implantar uma estratégia de migração de chave primária. Cada uma dessas 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 ter 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 no 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 chaves 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. As chaves invertidas geradas pelo objeto SEQUENCE do Spanner são sempre maiores que zero e são distribuídas uniformemente no espaço de número inteiro positivo de 64 bits.

Para instruções sobre como migrar bancos de dados com 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 das 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 que a lógica do seu aplicativo depende da ordem da chave primária para determinar a recência ou para ordenar os 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. Isso preserva os valores de chave ordenados, sem causar um ponto de acesso em 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