Configurar operações em conjuntos de réplicas
Visão geral
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:
Cliente, que define o padrão para todas as execuções de operações, a menos que sejam substituídas
transação
Database
collection
A lista anterior está em ordem crescente de precedência. Por exemplo, se você definir read concerns nos níveis de cliente e banco de dados de dados, a preocupação de leitura especificada no nível do banco de dados de dados substituirá a preocupação de leitura no nível do cliente .
Escreva preocupação
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 a preocupação de gravação usando o método writeConcern()
em um cliente ou transação, ou usando o método withWriteConcern()
em um banco de dados de dados ou collection.
Os métodos writeConcern()
e 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.MAJORITY
: 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.WriteConcern.JOURNALED
: a operação de gravação retorna depois que o nó primário grava os dados no diário em disco.
O exemplo a seguir define a preocupação de gravação como "majority"
para uma instância de MongoClient
:
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .writeConcern(WriteConcern.MAJORITY) .build(); MongoClient client = MongoClients.create(settings);
O exemplo a seguir define a preocupação de gravação como "majority"
para uma collection:
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withWriteConcern(WriteConcern.MAJORITY);
Observação
Collections e bancos de dados são imutáveis
MongoDatabase
e MongoCollection
instâncias são imutáveis. Quando você define a preocupação de gravação em um banco de dados de dados ou em uma collection, o método retorna uma nova instância 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 .
Preocupação de leitura
A read concern especifica os seguintes comportamentos:
Nível de consistência causal entre conjuntos de réplicas
Garantias de isolamento mantidas durante uma query
Você pode especificar a preocupação de leitura usando o método readConcern()
em um cliente ou transação, ou usando o método withReadConcern()
em um banco de dados de dados ou collection. Os métodos readConcern()
e 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
:
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .readConcern(ReadConcern.MAJORITY) .build(); MongoClient client = MongoClients.create(settings);
O exemplo a seguir define o preocupação de leitura como ReadConcern.MAJORITY
para uma collection:
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withReadConcern(ReadConcern.MAJORITY);
Para saber mais sobre preocupação de leitura, consulte Read Concern no manual do MongoDB Server .
readPreference
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 usando o método readPreference()
em um cliente ou transação, ou usando o método withReadPreference()
em um banco de dados de dados ou collection.
Os métodos readPreference()
e 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
:
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .readPreference(ReadPreference.secondary()) .build();
O exemplo a seguir define a preferência de leitura ReadPreference.secondary()
para uma collection:
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withReadPreference(ReadPreference.secondary());
Para obter mais informações sobre a preferência de leitura, consulte Read preference no manual do MongoDB Server .
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: