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.
É possível definir as opções de preocupação de gravação, preocupação de leitura e preferência de leitura nos seguintes níveis:
Cliente, que define o padrão para todas as execuções de operações, a menos que seja substituído
Sessão
transação
Database
collection
A lista anterior também indica a ordem crescente de precedência das configurações de opção. Por exemplo, se você definir um nível de preocupação de leitura para uma transação, ele substituirá um nível de preocupação de leitura definido para o cliente.
Essas opções permitem a você personalizar a consistência causal e a disponibilidade dos dados em seus conjuntos de réplicas.
Escreva preocupação
A referência de escrita especifica o nível de confirmação solicitado ao MongoDB para operações de gravação, como uma inserção ou atualização, antes que a operação seja retornada com êxito. As operações que não especificam uma referência de escrita explícita herdam as configurações globais padrão de referência de escrita.
Para obter mais informações, consulte Write Concern no manual do MongoDB Server. Para obter documentação detalhada da API, consulte a documentação da API Write Concern.
A tabela a seguir descreve os parâmetros write_concern
:
Parâmetro | Tipo | Descrição |
---|---|---|
| inteiro ou string | Solicita confirmação de que a operação de gravação se propagou para um número específico de instâncias |
| inteiro | Especifica um limite de tempo para impedir que as operações de gravação sejam bloqueadas indefinidamente. |
| booleano | Solicita confirmação de que a operação de gravação foi gravada no diário em disco . |
Exemplo: definir o write concern para uma única operação de escrita
O código a seguir cria um novo documento e especifica as configurações de preocupação de gravação w
e wtimeout
:
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'myDB') myDB = client.database myCollection = myDB[:myCollection] myCollection.insert_one( { name: 'anotherDocumentName' }, write: { w: 2, wtimeout: 5000 } )
Exemplo: recuperar e aplicar um write concern existente
O seguinte código utiliza o método new_write_concern
para construir um write_concern
a partir das opções de uma referência de banco de dados existente, myDB
. Em seguida, a nova preocupação de gravação é aplicada a um documento inserido.
myDoc = { name: 'New Document' } new_write_concern = Mongo::WriteConcern.get(myDB.write_concern) myDB[:myCollection].with(write: new_write_concern).insert_one(myDoc)
Observação
myDB
pode ser substituído por uma referência a qualquer entidade que aceite uma opção de preocupação de gravação .
Preocupação de leitura
A referência de leitura 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 configuração da preocupação de leitura usando o parâmetro level
. O nível de preocupação de leitura padrão é local
. Isso significa que o cliente retorna os dados do membro do conjunto de réplicas ao qual o cliente está conectado, sem garantia de que os dados tenham sido gravados em todos os membros do conjunto de réplicas.
Observação
Requisitos de nível de preocupação de leitura mais baixos podem reduzir a latência.
Para obter mais informações sobre read concern ou níveis de preocupação de leitura, consulte Read Concern no manual do MongoDB Server. Para obter mais detalhes sobre o tipo read_concern
e as definições dos níveis de preocupação de leitura, consulte Read Concern na documentação da API.
Exemplo: definir o nível de referência de leitura de uma agregação
O seguinte código define o nível de preocupação de leitura de uma agregação como "available"
:
pipeline = [ { "$match" => { category: 'KITCHENWARE' } }, { "$unset" => ['_id', 'category'] } ] result = myCollection.aggregate(pipeline, read: { read_concern: { level: :available } })
Dica
Para saber mais sobre as operações de agregação, consulte o guia Transforme seus dados com agregação.
Exemplo: alterar o read concern de um banco de dados
O seguinte código altera o nível de preocupação de leitura de um banco de dados para "local"
:
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'mydb', read_concern: { level: :local }) myDB = client.database
readPreference
A preferência de leitura determina qual membro de um conjunto de réplicas o MongoDB lê ao executar uma query.
Para obter uma documentação da API mais detalhada, consulte a documentação da API de preferência de leitura.
A tabela a seguir mostra as opções que você pode usar para personalizar como o servidor avalia os membros:
Parâmetro | Tipo | Descrição |
---|---|---|
|
| Especifica um requisito ou preferência de qual membro do conjunto de réplicas o servidor lê. O modo padrão, |
|
| Atribui tags aos membros do conjunto de réplicas secundário para personalizar como o servidor os avalia. As tags não podem ser usadas com a configuração do modo de preferência de leitura |
|
| Define várias opções, incluindo hedge e maxStalenessSeconds que podem ser aplicadas à sua preferência de leitura. |
Exemplo: definir read preference e concerns para uma transação
O código a seguir define a preferência de leitura, preocupação de leitura e preocupação de gravação para as operações em uma transação:
transaction_options = { read: { mode: :primary }, read_concern: { level: :local }, write_concern: { w: :majority } } session = client.start_session session.start_transaction(transaction_options) session.commit_transaction # ... rescue => e session.abort_transaction puts "Transaction aborted due to an error: #{e.message}" ensure session.end_session end
Dica
Para saber mais sobre transações, consulte o guia Transações.
Exemplo: definir a read preference de um cluster na connection string
Este exemplo de código cria um MongoClient
que usa o modo de preferência de leitura secondary
ao executar queries em um cluster:
uri = 'mongodb+srv://<user>:<password>@<cluster-url>' options = { read: { mode: :secondary, max_staleness: 120 } } client = Mongo::Client.new(uri, options) myDB = client.database
O exemplo anterior também define a opção maxStalenessSeconds
como 120
. Para obter mais informações sobre as opções de string de conexão, consulte a seção Opções de connection string no manual do MongoDB Server.
Documentação da API
Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo: