Práticas recomendadas de carregamento em massa

Nesta página, você verá diretrizes para o carregamento eficiente em massa de grandes quantidades de dados no Cloud Spanner.

Existem várias opções para carregar dados em massa no Cloud Spanner:

Diretrizes de desempenho para carregamento em massa

Para atingir o desempenho ideal de carregamento em massa, siga algumas diretrizes:

  • Minimize o número de divisões envolvidas em cada transação de gravação. O desempenho é maximizado porque o mesmo ocorre com a capacidade de gravação quando menos divisões estão envolvidas em uma transação.

  • Maximize o uso do particionamento para distribuir a gravação das partições nas tarefas do worker.

O Cloud Spanner usa a divisão baseada em carga para distribuir uniformemente a carga de dados nos nós. Após alguns minutos de alta carga, o Cloud Spanner introduz limites divididos entre as linhas de tabelas não intercaladas. Em geral, se o carregamento de dados estiver bem distribuído e você seguir as práticas recomendadas para o design do esquema e o carregamento em massa, a capacidade de gravação dobrará a cada poucos minutos até saturar os recursos disponíveis da CPU na instância.

Particionar os dados por chave primária

Para conseguir a capacidade ideal de gravação para cargas em massa, particione os dados por chave primária com este padrão:

  • Cada partição contém um intervalo de linhas consecutivas, conforme determinado pelas colunas-chave.
  • Cada confirmação contém dados para apenas uma única partição.

Recomenda-se que o número de partições seja 10 vezes o número de nós na instância do Cloud Spanner. Para atribuir linhas a partições, faça o seguinte:

  • Classifique os dados por chave primária.
  • Divida os dados em 10 * (número de nós) partições separadas e com tamanhos iguais.
  • Crie e atribua uma tarefa de worker separada para cada partição. Isso é feito no aplicativo e não é um recurso do Cloud Spanner.

Seguindo esse padrão, você verá uma capacidade máxima geral de gravação em massa de 10 a 20 MB por segundo por nó para cargas grandes.

À medida que os dados são carregados, o Cloud Spanner cria e atualiza divisões para equilibrar a carga nos nós na instância. Durante esse processo, pode ocorrer uma queda temporária na capacidade.

Exemplo

Você tem uma configuração regional com 3 nós e 90.000 linhas em uma tabela não intercalada. As chaves primárias no intervalo da tabela variam de 1 a 90.000.

  • Linhas: 90.000
  • Nós: 3
  • Partições: 10 * 3 = 30
  • Linhas por partição: 90000 / 30 = 3000.

A primeira partição inclui o intervalo de chaves de 1 a 3000. A segunda inclui o intervalo de chaves 3001 a 6000. A 30ª partição inclui o intervalo de chaves 87001 a 90000. Não use chaves sequenciais em uma tabela grande. Este exemplo é apenas para demonstração.

Cada tarefa de worker envia as gravações para uma única partição. Dentro de cada uma delas, grave as linhas sequencialmente pela chave primária. Gravar linhas de forma aleatória, com relação à chave primária, também fornecerá uma capacidade consideravelmente alta. A medição das execuções de teste fornecerá um insight sobre qual abordagem fornece o melhor desempenho para o conjunto de dados.

Se você decidir não usar partições

Gravar linhas aleatórias em uma confirmação em que cada mutação insere uma única linha pode ser mais lento do que gravar uma linha por vez. Provavelmente, várias divisões estarão envolvidas, porque cada linha aleatória pode pertencer a uma divisão diferente. Na pior das hipóteses, cada gravação envolve todas as divisões na instância do Cloud Spanner. Conforme mencionado acima, a capacidade de gravação é diminuída quando mais máquinas estão envolvidas.

Evite o pushback

É possível enviar mais solicitações de gravação do que o Cloud Spanner consegue processar. Ele cancela transações para processar a sobrecarga, o que é chamado de pushback. Para transações somente gravação, o Cloud Spanner as repete automaticamente. Nesses casos, o pushback aparece como alta latência. Durante cargas pesadas, ele pode levar até um minuto. Durante cargas muito pesadas, ele pode levar vários minutos. Para evitá-lo, limite os pedidos de gravação para manter a utilização da CPU dentro de limites razoáveis.

Confirmação entre 1 MB e 5 MB de mutação por vez

Cada gravação do Cloud Spanner contém algumas sobrecargas, seja ela grande ou pequena. Para maximizar a capacidade, aumente a quantidade de dados armazenados por gravação. Gravações maiores diminuem a taxa de sobrecarga por gravação. Uma boa técnica é que cada confirmação faça mutação de centenas de linhas. Ao gravar linhas relativamente grandes, um tamanho de confirmação de 1 MB a 5 MB geralmente fornece o melhor desempenho. Ao gravar valores pequenos ou indexados, normalmente é melhor gravar, no máximo, algumas centenas de linhas em uma única confirmação. Independentemente do tamanho da confirmação e do número de linhas, lembre-se de que há uma limitação de 20.000 mutações por confirmação. Para determinar o desempenho ideal, teste e meça a capacidade.

Confirmações maiores que 5 MB ou do que algumas centenas linhas não fornecem benefícios extras. Além disso, correm o risco de exceder os limites do Cloud Spanner no tamanho da confirmação e nas mutações por confirmação.

Diretrizes para índices secundários

Se o banco de dados tiver índices secundários, escolha entre adicionar os índices ao esquema do banco de dados antes ou depois de carregar os dados da tabela.

  • Se estiver adicionando dezenas de milhões de linhas ou mais, insira um índice depois que os dados da tabela forem carregados, em vez de carregá-los e preencher o índice ao mesmo tempo.
  • Caso adicione os índices após os dados, leve em conta o custo de desempenho das alterações de esquema. Como regra geral, limite a adição de índices a 3 por dia ou uma média de 21 por semana.
  • Meça as cargas de teste antes de fazer uma escolha final.

Ao carregar uma grande quantidade de dados, crie os índices antes de carregar os dados para ter o melhor desempenho. Se houver menos de 21 índices (o máximo semanal recomendado), pense em incluir os índices após o carregamento dos dados.

Para criar índices secundários, o Cloud Spanner preenche automaticamente os índices usando um processo em segundo plano. As divisões de um índice secundário normalmente residem em servidores diferentes da própria tabela. Vários servidores estão envolvidos quando os dados são gravados em uma tabela com um índice secundário. Como resultado, as confirmações em uma tabela com um índice secundário usam um protocolo de confirmação de vários servidores que adiciona sobrecarga e latência extras. Se as tabelas não tiverem índices secundários quando o upload dos dados em massa for feito, menos servidores estarão envolvidos e a capacidade de gravação em massa será maximizada.

Testar e medir a capacidade

A previsão da capacidade pode ser difícil. Teste sua estratégia de carregamento em massa antes de executar a carga final. Para um exemplo detalhado usando o particionamento e o monitoramento do desempenho, consulte Como maximizar a capacidade do carregamento de dados.

Práticas recomendadas para carregamento em massa periódico em um banco de dados atual

Se você estiver atualizando um banco de dados atual que contém dados, mas não tem índices secundários, as recomendações neste tópico ainda se aplicam.

Caso tenha índices secundários, as instruções podem produzir um desempenho razoável. Ele depende de quantas divisões, em média, estão envolvidas nas transações. Se a capacidade cair muito, tente o seguinte:

  • Inclua um número menor de mutações em cada confirmação, o que pode aumentar a capacidade.
  • Se o upload for maior que o tamanho atual total da tabela sendo atualizada, exclua os índices secundários e adicione-os novamente depois de fazer o upload dos dados. Essa etapa geralmente não é necessária, mas pode melhorar a capacidade.

Práticas recomendadas para importar arquivos Avro

Nestas páginas, você verá informações sobre como melhorar o desempenho de importação de arquivos Avro:

Práticas recomendadas para usar o conector do Cloud Dataflow

Para dicas de desempenho sobre como usar o conector do Cloud Dataflow, consulte Como gravar no Cloud Spanner e como transformar dados.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Spanner