Partilhar via


Otimizar o desempenho de escrita no Azure Cosmos DB para MongoDB

APLICA-SE A: MongoDB

Otimizar o desempenho de escrita ajuda-o a tirar o máximo partido do Azure Cosmos DB para a escala ilimitada do MongoDB. Ao contrário de outros serviços do MongoDB geridos, a API para MongoDB fragmenta automaticamente e de forma transparente as suas coleções (ao utilizar coleções fragmentadas) para dimensionar infinitamente.

A forma como escreve dados tem de estar atenta a esta situação ao paralelizar e distribuir dados entre partições horizontais para obter o máximo de escritas das suas bases de dados e coleções. Este artigo explica as melhores práticas para otimizar o desempenho de escrita.

Distribuir a carga pelas partições horizontais

Ao escrever dados numa API fragmentada para a recolha do MongoDB, os seus dados são divididos (fragmentados) em setores minúsculos e são escritos em cada partição horizontal com base no valor do campo da chave de partição horizontal. Pode considerar cada setor como uma pequena parte de uma máquina virtual que armazena apenas os documentos que contêm um valor de chave de partição horizontal exclusivo.

Se a sua aplicação escrever uma grande quantidade de dados numa única partição horizontal, isto não será eficiente porque a aplicação estaria a atingir o limite do débito de apenas uma partição horizontal em vez de distribuir a carga por todas as partições horizontais. A carga de escrita será distribuída uniformemente pela coleção ao escrever em paralelo em muitos documentos com valores de chave de partição horizontal exclusivos.

Um exemplo de como fazê-lo seria uma aplicação de catálogo de produtos que é fragmentada no campo de categoria. Em vez de escrever numa categoria (partição horizontal) de cada vez, é melhor escrever em todas as categorias simultaneamente para alcançar o débito máximo de escrita.

Reduzir o número de índices

A indexação é uma excelente funcionalidade para reduzir drasticamente o tempo que demora a consultar os seus dados. Para a experiência de consulta mais flexível, a API para MongoDB permite que um índice de carateres universais nos seus dados, por predefinição, torne as consultas em todos os campos rapidamente. No entanto, todos os índices, que incluem índices de carateres universais, introduzem carga adicional ao escrever dados porque as escritas alteram a coleção e os índices.

Reduzir o número de índices apenas para os índices de que precisa para suportar as suas consultas tornará as suas escritas mais rápidas e baratas. Regra geral, recomendamos o seguinte:

  • Qualquer campo que filtrar deve ter um índice de campo único correspondente para o mesmo. Esta opção também ativa a filtragem de vários campos.
  • Qualquer grupo de campos que ordene deve ter um índice composto para esse grupo.

Definir ordenado como falso nos controladores do MongoDB

Por predefinição, os controladores do MongoDB definem a opção ordenada como "verdadeiro" ao escrever dados, o que escreve cada documento pela ordem um a um. Esta opção reduz o desempenho de escrita, uma vez que cada pedido de escrita tem de aguardar que o anterior seja concluído. Ao escrever dados, defina esta opção como falso para melhorar o desempenho.

db.collection.insertMany(
   [ <doc1> , <doc2>, ... ],
   {
      ordered: false
   }
)

Otimizar o tamanho ideal do lote e a contagem de threads

A paralelização das operações de escrita em muitos threads/processos é fundamental para dimensionar as escritas. A API para MongoDB aceita escritas em lotes de até 1000 documentos para cada processo/thread.

Se estiver a escrever mais de 1000 documentos de cada vez por processo/thread, as funções de cliente, como insertMany() , por exemplo, devem estar limitadas a cerca de 1000 documentos. Caso contrário, o cliente aguardará que cada lote se consolide antes de avançar para o lote seguinte. Em alguns casos, dividir os lotes com menos ou pouco mais de 1000 documentos será mais rápido.

Passos seguintes