Esta página descreve como o Spanner funciona com chaves primárias e oferece estratégias de migração de chave primária para os seguintes casos de uso:
- Como migrar bancos de dados de chaves UUID
- Como migrar bancos de dados de instância única com chaves sequenciais
- Como migrar bancos de dados de chaves sequenciais com suporte para ativação em tempo real
- Como migrar bancos de dados de chaves sequenciais com dependências de lógica de aplicativos
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 as 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 composta por uma 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, chamadas de divisões, entre nós de computação em uma instância do Spanner. Isso é chamado de fragmentação de intervalo e permite que o Spanner coloque consultas em paralelo e escale.
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 todos os recursos de computação e memória disponíveis. Um ponto de acesso pode aumentar a latência, o que pode levar a tempos limite e transações abortadas.
Para aproveitar a escalabilidade do Spanner e evitar pontos de acesso, o Spanner oferece soluções integradas como alternativas ao incremento automático de chaves primárias.
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 exclusivo (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.
Use chaves primárias inteiras, porque elas ocupam menos espaço e reduzem a complexidade das mudanças de aplicativo que você precisa fazer. Use uma sequência de bits invertida para gerar valores de chave primária exclusivos que são distribuídos uniformemente no espaço de número inteiro positivo de 64 bits.
Para mais informações sobre como escolher uma chave primária para evitar pontos de acesso, consulte Práticas recomendadas de design 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 correção das chaves primárias migradas.
- Minimize as mudanças no aplicativo downstream, como a alteração de tipos ou valores de 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 e não afeta os dados 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 seu banco de dados de origem e importe-as para o Spanner como estão. Os valores UUID, v4 em particular, são efetivamente exclusivos, independentemente de onde são gerados.
É possível usar a 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.
Migrar bancos de dados de chaves sequenciais com suporte para ativaçã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. As chaves invertidas geradas pelo objeto SEQUENCE
do Spanner são sempre maiores que zero, mas não são ordenadas.
Para instruções sobre como migrar bancos de dados com suporte à ativação em tempo real, consulte Usar o Spanner e o banco de dados de origem.
Migrar bancos de dados de chaves sequenciais com dependências de lógica de aplicativo
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 dependências de lógica de aplicativos, consulte Migrar suas próprias chaves primárias.
A seguir
- Para conferir os fluxos de trabalho de migração detalhados, consulte Migrar chaves primárias.