Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

Configurar operações em conjuntos de réplicas

Neste guia, você pode aprender como usar as configurações de referência de escrita, referência de leitura e preferência de leitura para modificar a maneira como o MongoDB executa as operações de criação, leitura, atualização e exclusão (CRUD) em conjuntos de réplicas.

Você pode definir essas configurações nos seguintes níveis:

  1. Cliente, que define o padrão para todas as execuções de operações, a menos que sejam substituídas

  2. transação

  3. Database

  4. collection

Esta lista está em ordem crescente de precedência. Por exemplo, se você definir read concerns nos níveis de cliente e banco de dados , a preocupação de leitura especificada no nível do banco de dados substituirá a preocupação de leitura no nível do cliente .

A preocupação com a gravação especifica o nível de confirmação solicitado ao MongoDB para operações de gravação antes que a operação retorne com êxito. As operações que não especificam uma preocupação de gravação explícita herdam a configuração global padrão de preocupação de gravação .

Você pode definir o preocupação de gravação definindo a opção WriteConcern em um objeto MongoClientSettings, MongoDatabaseSettings ou MongoCollectionSettings ou usando o método WithWriteConcern() de um cliente, banco de dados ou instância de coleção.

A opção WriteConcern e o método WithWriteConcern() aceitam uma instância do WriteConcern como um parâmetro. Você pode especificar a preocupação de gravação usando um dos seguintes valores:

  • WriteConcern.Acknowledged: a operação de gravação retorna depois que a operação é gravada na memória.

  • WriteConcern.W1: A operação de gravação retorna depois que apenas o nó primário reconhece a operação de gravação, sem esperar pela confirmação dos nós secundários.

  • WriteConcern.W2: A operação de gravação retorna após o nó primário e pelo menos um nó secundário reconhecerem a operação de gravação.

  • WriteConcern.W3: A operação de gravação retorna após o nó primário e pelo menos dois nós secundários reconhecerem a operação de gravação.

  • WriteConcern.WMajority: A operação de gravação retorna após a maioria dos membros do conjunto de réplica reconhecer a operação de gravação.

  • WriteConcern.Unacknowledged: A operação de gravação retorna após o nó primário processar a operação de gravação.

O exemplo a seguir define a preocupação de gravação como WriteConcern.WMajority para uma instância de MongoClient:

var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection URI>");
mongoClientSettings.WriteConcern = WriteConcern.WMajority;
var mongoClient = new MongoClient(mongoClientSettings);

O exemplo a seguir define a preocupação de gravação como WriteConcern.WMajority para uma collection:

var collection = database.GetCollection<BsonDocument>("<collection name>")
.WithWriteConcern(WriteConcern.WMajority);

Observação

Clientes, coleções e bancos de dados são imutáveis

IMongoClient, IMongoDatabase e IMongoCollection são imutáveis. Quando você define o preocupação de gravação em um cliente, banco de dados ou coleção, o método retorna uma nova instância com as configurações especificadas e não afeta a instância original.

Para obter mais informações sobre preocupação de gravação, consulte Write Concern no manual do MongoDB Server .

A read concern especifica os seguintes comportamentos:

Você pode especificar a preocupação de leitura definindo a opção ReadConcern em um objeto MongoClientSettings, MongoDatabaseSettings ou MongoCollectionSettings ou usando o método WithReadConcern() em um cliente, banco de dados ou collection.

A opção ReadConcern e o método WithReadConcern() aceitam um único parâmetro que especifica o nível de preocupação de leitura .

Você pode definir os seguintes níveis de preocupação de leitura :

  • ReadConcern.Local: a query retorna os dados mais recentes da instância. Não garante que os dados tenham sido gravados para a maioria dos membros do conjunto de réplicas.

  • ReadConern.Available: a query retorna os dados mais recentes da instância. Não garante que os dados tenham sido gravados para a maioria dos membros do conjunto de réplicas. ReadConcern.Available não está disponível para uso com sessões e transações causalmente consistentes.

  • ReadConcern.Majority: a query retorna dados que foram confirmados por uma maioria dos membros do conjunto de réplicas.

  • ReadConcern.Linearizable: a query retorna dados que refletem todas as gravações bem-sucedidas concluídas antes do início da operação de leitura. ReadConcern.Linearizable não está disponível para uso com sessões e transações causalmente consistentes.

  • ReadConcern.Snapshot: a query retorna dados comprometidos pela maioria como aparece nos fragmentos, a partir de um único ponto específico no passado recente.

Para obter mais informações sobre os níveis de preocupação de leitura , consulte Níveis de read concern no manual do MongoDB Server .

O exemplo a seguir define o preocupação de leitura como ReadConcern.Majority para uma instância de MongoClient:

var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection URI>");
mongoClientSettings.ReadConcern = ReadConcern.Majority;
var mongoClient = new MongoClient(mongoClientSettings);

O exemplo a seguir define o preocupação de leitura como ReadConcern.Majority para uma collection:

var collection = database.GetCollection<BsonDocument>("<collection name>")
.WithReadConcern(ReadConcern.Majority);

Para saber mais sobre preocupação de leitura, consulte Read Concern no manual do MongoDB Server .

A preferência de leitura determina qual membro de um conjunto de réplicas o MongoDB lê ao executar uma query. Você pode definir a preferência de leitura definindo a opção ReadPreference em um objeto MongoClientSettings, MongoDatabaseSettings ou MongoCollectionSettings ou usando o método WithReadPreference() em um cliente, banco de dados ou collection.

A opção ReadPreference e o método WithReadPreference() aceitam um modo de preferência de leitura como um parâmetro. Você pode definir o modo de preferência de leitura para um dos seguintes valores:

  • ReadPreference.Primary: a query retorna dados do nó primário.

  • ReadPreference.PrimaryPreferred: a query retorna dados do nó primário, se disponíveis. Caso contrário, a query retornará dados de um nó secundário.

  • ReadPreference.Secondary: a query retorna dados de um nó secundário.

  • ReadPreference.SecondaryPreferred: A query retorna dados de um nó secundário, se disponíveis. Caso contrário, a query retorna dados do nó primary.

  • ReadPreference.Nearest: a query retorna dados do nó com a menor latência de rede.

O exemplo a seguir define a preferência de leitura ReadPreference.Secondary para uma instância de MongoClient:

var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection URI>");
mongoClientSettings.ReadPreference = ReadPreference.Secondary;
var mongoClient = new MongoClient(mongoClientSettings);

O exemplo a seguir define a preferência de leitura ReadPreference.Secondary para uma collection:

var collection = database.GetCollection<BsonDocument>("<collection name>")
.WithReadPreference(ReadPreference.Secondary);

Para obter mais informações sobre a preferência de leitura, consulte Read preference no manual do MongoDB Server .

O driver .NET/C# tenta automaticamente determinadas operações de leitura e gravação uma única vez se elas falharem devido a um erro de rede ou servidor .

Você pode desabilitar explicitamente as leituras ou gravações repetíveis definindo as opções RetryReads ou RetryWrites em um objeto MongoClientSettings e passando esse objeto para o construtor MongoClient . Você também pode definir as opções retryReads ou retryWrites em uma string de conexão.

O exemplo a seguir desativa leituras e gravações repetíveis para um cliente. Selecione a aba MongoClientSettings ou Connection String para ver o código correspondente.

var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection URI>");
mongoClientSettings.RetryReads = false;
mongoClientSettings.RetryWrites = false;
var mongoClient = new MongoClient(mongoClientSettings);
var connectionString = "mongodb://localhost:27017/?retryReads=false&retryWrites=false";
var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString);
var mongoClient = new MongoClient(mongoClientSettings);

Para saber mais sobre as operações de leitura e gravações repetíveis, consulte Retryable Reads e Retryable Writes no manual do MongoDB Server.

Observação

Limitação de taxa adaptativa

Se os erros com rótulos SystemOverloadedError ou RetryableError estiverem causando falhas no seu aplicativo ou aparecendo nos logs do seu aplicativo, o driver pode não ser atualizado para uma versão compatível com limitação adaptativa da taxa. Recomendamos atualizar seu driver MongoDB .NET/C# para a versão 3.8 ou posterior. Se você continuar a ver esses erros após a atualização, poderá resolvê-los por meio de alterações no servidor, como a revisão da configuração do Intelligent Workload Management (IWM), ou por meio de alterações no aplicativo, como a implementação do tratamento personalizado de erros ou a solicitação do lado do cliente estrangulamento. Dependendo da sua situação, alterações no aplicativo podem ser preferíveis ou necessárias.

A limitação adaptativa da taxa ajuda a gerenciar a carga do servidor ajustando dinamicamente as taxas de solicitação com base nas condições atuais. Este recurso está disponível no MongoDB 8.3 e posterior.

Para mais informações sobre IWM, consulte a página Confiabilidade, Disponibilidade e Gerenciamento de carga de trabalho ou a página Erros de Sobrecarga na documentação do Atlas.

Para saber mais sobre qualquer um dos tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Armazenar arquivos grandes

Nesta página