Menu Docs
Página inicial do Docs
/ /

Operações de gravação em massa

O MongoDB oferece aos clientes a capacidade de realizar operações de gravação em massa. A partir do MongoDB 8.0, você pode executar operações de gravação em massa em vários bancos de dados e collections. Se você estiver usando uma versão anterior ao MongoDB 8.0, poderá executar operações de gravação em massa em uma única coleção.

Para realizar operações de escrita em massa em vários bancos de dados e collections no MongoDB 8.0, use o comando de banco de dadosbulkWrite ou o método Mongo.bulkWrite() mongosh.

Para executar operações de escrita em massa em uma única collection, use o método db.collection.bulkWrite() mongosh. Se você estiver executando o MongoDB 8.0 ou posterior, também poderá usar bulkWrite ou Mongo.bulkWrite() para escrever em uma única collection.

As operações de gravação em massa são executadas em série (ordenadas) ou em qualquer ordem (não ordenada). Por padrão, as operações são ordenadas e param no primeiro erro. As operações não ordenadas continuam apesar dos erros e podem ser executadas em paralelo, o que as torna normalmente mais rápidas para coleções fragmentadas.

Para obter informações detalhadas sobre o comportamento de execução e o tratamento de erros, consulte db.collection.bulkWrite() Mongo.bulkWrite()ou.

Suporte a operações de gravação em massa: Inserir um, atualizar um, atualizar muitos, substituir um, excluir um e excluir muitos.

Grandes operações de inserção em massa podem impacto o desempenho de cluster fragmentado . Para otimizar gravações em massa em coleções fragmentadas:

Se sua coleção fragmentada estiver vazia e você não estiver usando fragmentação com hash para a primeira chave da sua chave de fragmento, então sua coleção terá apenas um chunk inicial, que reside em um único fragmento. O MongoDB deve então dedicar tempo para receber dados e distribuir as partes para os fragmentos disponíveis. Para evitar esse custo de desempenho, pré-divida a coleção criando intervalos em um cluster fragmentado.

Para melhorar o desempenho de gravação em clusters fragmentados, execute uma gravação em massa não ordenada definindo ordered como false quando executar uma gravação em massa. tenta enviar as gravaçõesmongos para vários fragmentos simultaneamente. Para coleções vazias , primeiro pré-dividir a coleção conforme descrito em Dividir partes em um cluster fragmentado.

Se sua chave de estilhaço aumenta monotonicamente durante uma inserção, todos os dados inseridos vão para o último bloco da coleção, que sempre terminará em um único fragmento. Portanto, a capacidade de inserção do cluster nunca excederá a capacidade de inserção desse único fragmento.

Se o volume de inserção for maior do que o que um único estilhaço pode processar e se você não puder evitar uma chave de estilhaço monotonicamente crescente, considere as seguintes modificações no aplicativo:

  • Inverta os bits binários da chave de fragmento. Isso preserva as informações e evita correlacionar a ordem de inserção com a crescente sequência de valores.

  • Troque a primeira e a última palavras de 16 bits para "embaralhar" as inserções.

Exemplo

O exemplo a seguir, em C++, troca a palavra de 16 bits inicial e final dos BSON ObjectIds gerados para que eles não sejam mais monotonicamente crescentes.

using namespace mongo;
OID make_an_id() {
OID x = OID::gen();
const unsigned char *p = x.getData();
swap( (unsigned short&) p[0], (unsigned short&) p[10] );
return x;
}
void foo() {
// create an object
BSONObj o = BSON( "_id" << make_an_id() << "x" << 3 << "name" << "jane" );
// now we may insert o into a sharded collection
}

Voltar

Métodos

Nesta página