Práticas recomendadas de carregamento de dados em massa

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

Para fazer upload em massa de dados de maneira eficiente para o Cloud Spanner, você precisa dos seguintes itens:

  • Um esquema para as tabelas no banco de dados, mas sem índices secundários
  • Um conjunto de dados que você quer carregar, como dados de outro banco de dados, um conjunto de arquivos estáticos, dados gerados de maneira programática ou outra fonte.
  • Uma compreensão do design do esquema do Cloud Spanner.

Visão geral

O Cloud Spanner foi projetado para dimensionar com alta capacidade de leitura e gravação e armazenamento de dados de alto volume (centenas de terabytes ou mais). No entanto, o desempenho ideal não está garantido, a menos que certas práticas recomendadas sejam seguidas. O tema comum para o desempenho ideal do carregamento em massa é minimizar o número de máquinas envolvidas em cada gravação, porque a capacidade de gravação agregada é maximizada quando menos máquinas estão envolvidas.

O Cloud Spanner usa divisão baseada em carga para distribuir de maneira uniforme a carga de dados em nodes: após alguns minutos de carga elevada, o Cloud Spanner apresenta limites de divisão entre linhas de tabelas não intercaladas e atribui cada divisão a um servidor diferente. Como regra 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, sua capacidade de gravação deverá dobrar a cada poucos minutos até saturar os recursos na instância.

Particionar os dados por chave primária

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

  • Cada partição contém um intervalo de linhas consecutivas.
  • Cada confirmação contém dados para apenas uma única partição.

Uma boa regra geral para o número de partições é 10 vezes o número de nodes na instância do Cloud Spanner. Então, se você tiver N nodes, com um total de 10*N partições, será possível atribuir linhas às partições por:

  • classificação de dados por chave primária;
  • divisão de dados em 10*N seções separadas;
  • criação de um conjunto de tarefas de trabalho que fazem upload dos dados.

Cada trabalho será gravado em uma única partição. Dentro da partição, é recomendado que o trabalho grave as linhas sequencialmente. No entanto, gravar dados de maneira aleatória dentro de uma partição também deve fornecer uma capacidade razoavelmente alta.

Conforme mais dados são carregados, o Cloud Spanner divide e reequilibra automaticamente seus dados para balancear a carga nos nodes na instância. Durante esse processo, pode ocorrer uma queda temporária na capacidade.

Seguindo esse padrão, você verá uma capacidade global máxima de gravação em massa de 10-20 MiB por segundo por nó.

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

Cada gravação no Cloud Spanner contém algumas sobrecargas. Para maximizar a capacidade de gravação em massa, maximize a quantidade de dados armazenados por gravação. Uma boa técnica é que cada confirmação faça mutação de centenas de linhas. Confirmações com o número de mutações no intervalo de 1 MB - 5 MB geralmente fornecem o melhor desempenho.

Confirmações com mais de 5 MB de mutações não oferecem benefícios extras, e elas correm o risco de exceder os limites do Cloud Spanner em tamanho de confirmação e mutações por confirmação.

Fazer o upload de dados antes de criar índices secundários

Antes da criação de índices secundários, um upload em massa dos seus dados é realizado. Divisões para um índice secundário normalmente ficam em máquinas diferentes da própria tabela. Como várias máquinas estão envolvidas quando os dados são gravados em uma tabela com um índice secundário, as confirmações usam um protocolo de confirmação de várias máquinas mais caro que adiciona latência e sobrecarga extra. Se as tabelas não têm índices secundários quando o upload dos dados em massa é feito, menos máquinas estão envolvidas e a capacidade de gravação em massa é maximizada.

Depois de fazer o upload em massa dos dados, crie os índices secundários. O Cloud Spanner preencherá automaticamente os índices por meio de um processo em segundo plano. Para mais informações, consulte Como adicionar um índice.

Uploads em massa periódicos para um banco de dados

Se você está atualizando um banco de dados que contém dados, mas não tem índices secundários, as instruções acima ainda se aplicam.

Se você tem índices secundários, as instruções ainda podem produzir um desempenho razoável. Isso dependerá de quantas divisões, em média, estiverem envolvidas nas transações. Se a capacidade agregada ficar muito baixa, você poderá:

  • incluir um número menor de mutações em cada confirmação, porque isso pode aumentar a capacidade agregada;
  • se o upload for maior do que o tamanho atual total da tabela que está sendo atualizado, exclua os índices secundários e depois os adicione novamente assim que o upload for concluído. Essa etapa geralmente não é necessária, mas está disponível como uma opção.

Evitar práticas ineficientes

Há várias práticas que devem ser evitadas durante ao fazer o upload em massa dos dados, porque elas levam a uma capacidade de gravação menor.

Não grave uma linha de cada vez

Cada gravação do Cloud Spanner contém algumas sobrecargas, seja a escrita grande ou pequena. Gravar uma linha de cada vez diminui a capacidade porque exige uma alta proporção de sobrecarga por gravação. Um exemplo de custo de sobrecarga é que cada gravação precisa ser feita e reconhecida pela maioria das máquinas que têm a divisão em que a gravação ocorre. O processo de gravação e reconhecimento exige idas e voltas da rede. A realização de idas e voltas da rede para cada linha aumenta o tempo necessário para fazer o upload em massa.

Não empacote N linhas aleatórias em uma confirmação com N mutações

Gravar linhas aleatórias em uma confirmação em que cada mutação insere uma única linha pode ser pior do que escrever uma linha por vez. Provavelmente várias máquinas estão envolvidas, porque cada linha aleatória pode pertencer a uma máquina diferente. No pior dos casos, cada gravação envolverá todas as máquinas na instância do Cloud Spanner. Conforme mencionado acima, a capacidade de gravação é diminuída quando mais máquinas estão envolvidas em uma gravação.

Não adicione todas as linhas de maneira sequencial na ordem da chave primária

Adicionar linhas de maneira sequencial significa que as gravações são adicionadas ao final do intervalo de chaves. Isso ocasiona um ponto de acesso, que é uma concentração de operações em um único nó. Isso diminui a capacidade de gravação para um único nó em vez de aproveitar os nós com balanceamento de carga. Para mais informações sobre pontos de acesso, consulte Como escolher uma chave primária.

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

Enviar comentários sobre…

Documentação do Cloud Spanner