Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Ruby Driver

Operações CRUD 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.

É 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.

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

w (Opcional)

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 mongod ou para instâncias mongod rotuladas com tags especificadas.

wtimeoutMS (Opcional)

inteiro

Especifica um limite de tempo para impedir que as operações de gravação sejam bloqueadas indefinidamente.

journal (Opcional)

booleano

Solicita confirmação de que a operação de gravação foi gravada no diário em disco .

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
}
)

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 .

A referência de leitura especifica os seguintes comportamentos:

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.

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.

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

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

mode

Symbol

Especifica um requisito ou preferência de qual membro do conjunto de réplicas o servidor lê. O modo padrão, :primary , especifica que as operações são lidas a partir do nó primário do conjunto de réplicas.

tags (Opcional)

Array<Hash>

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 :primary .

options (Opcional)

Hash

Define várias opções, incluindo hedge e maxStalenessSeconds que podem ser aplicadas à sua preferência de leitura.

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.

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.

Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo:

Voltar

Armazene arquivos grandes usando o GridFS