Menu Docs
Página inicial do Docs
/ / /
Driver GO
/ /

Modificar execução de operações CRUD

Nesta página

  • Visão geral
  • Escreva preocupação
  • Preocupação de leitura
  • readPreference
  • Informações adicionais

Neste guia, você pode aprender a modificar a maneira como o MongoDB Go Driver executa as operações de criação, leitura, atualização e exclusão (CRUD) usando configurações de preocupação de gravação, preocupação de leitura e preferência de leitura para 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:

  • Nível do cliente, que define o padrão para todas as execuções de operações, a menos que sejam substituídas

  • Nível da sessão

  • Nível de transação

  • Nível do banco de dados

  • Nível de collection

Nas seções a seguir, você aprenderá a personalizar a consistência e a disponibilidade dos dados em seus conjuntos de réplicas.

Uma referência de escrita descreve o número de membros portadores de dados em um conjunto de réplicas que devem reconhecer uma operação de gravação, como uma inserção ou atualização, antes que a operação seja retornada como bem-sucedida. Por padrão, a referência de escrita exige que apenas o membro primary do conjunto de réplicas reconheça a operação de escrita antes que a operação seja considerada bem-sucedida.

O MongoDB Go Driver fornece o pacote writeconcern, que permite especificar a referência de escrita para um conjunto de réplicas. Defina a referência de escrita utilizando o método SetWriteConcern() com um tipo WriteConcern . O tipo WriteConcern tem os seguintes métodos para selecionar especificações de referência de escrita comuns:

Método
Descrição
Custom()
O cliente solicita confirmação de que as operações de escrita se propagam para os nós marcados de uma instância mongod . Para obter mais informações, consulte a especificação Write Concern.

Parâmetro: string
Journaled()
O cliente solicita a confirmação de que as operações de gravação são gravadas no diário em disco. Para obter mais informações, consulte a especificação Write Concern.

Parâmetro: nenhum
Majority()
O cliente solicita confirmação de que as operações de escrita se propagam para a maioria dos membros votantes portadores de dados. Para obter mais informações, consulte a especificação Write Concern.

Parâmetro: nenhum
Unacknowledged()
O cliente não solicita confirmação de operações de escrita. Para obter mais informações, consulte a especificação Write Concern para w: 0.

Parâmetro: nenhum
W1()
O cliente solicita a confirmação de que as operações de gravação foram gravadas na memória em um nó, como o mongod autônomo ou o primário em um conjunto de réplicas. Para obter mais informações, consulte a especificação Write Concern para w: 1.

Parâmetro: nenhum

Se você precisar de uma preocupação de gravação mais especializada, você pode definir um literal de estrutura WriteConcern personalizado. Você pode definir os seguintes campos em uma estrutura WriteConcern:

Campo
Descrição
W
Especifica o número de instâncias de mongod ou membros marcados para os quais as operações de gravação devem se propagar para confirmação. Valores comuns incluem 1, 0 e "majority".

Tipo: string ou int
Journal
Especifica se as operações de gravação devem ser gravadas no registro no diário em disco para confirmação.

Tipo: bool
WTimeout
Especifica um limite de tempo para o write concern. Esta configuração é aplicável somente para valores W maiores que 1. Especificar esta configuração e especificar umTempo limite do no cliente ao mesmo tempo resulta em comportamento indefinido. Para saber mais, consulte a especificação Write Concern para wtimeout.

Tipo: time.Duration

Dica

Como alternativa, você pode especificar uma write concern em sua connection string. Consulte a entrada manual do servidor MongoDB em Opções de preocupação de gravação para obter mais informações.

O código a seguir mostra como você pode especificar diferentes referências de escrita no nível do cliente e da collection. A referência de escrita no nível do cliente solicita confirmação de dois membros do conjunto de réplicas e define o registro no diário como false. A referência de escrita no nível da collection solicita confirmação da maioria dos membros do conjunto de réplicas.

uri := "mongodb://<hostname>:<port>"
journal := false
cliWC := &writeconcern.WriteConcern{
W: 2,
Journal: &journal,
}
clOpts := options.Client().ApplyURI(uri).SetWriteConcern(cliWC)
client, err := mongo.Connect(context.TODO(), clOpts)
...
collWC := writeconcern.Majority()
collOpts := options.Collection().SetWriteConcern(collWC)
coll := client.Database("db").Collection("myColl", collOpts)

A opção de preocupação de leitura possibilita que você determine quais dados o cliente retorna de uma query. O nível de preocupação de leitura padrão é "local", o que significa que o cliente retorna os dados mais recentes da instância, sem garantia de que os dados tenham sido gravados na maioria dos membros do conjunto de réplicas.

O driver Go do MongoDB fornece o pacote readconcern, que permite especificar a preocupação de leitura para um conjunto de réplicas. Defina a preocupação de leitura usando o método SetReadConcern() com um tipo ReadConcern. O tipo ReadConcern tem os seguintes métodos para especificar a preocupação de leitura:

Método
Descrição
Available()
A query retorna dados da instância sem garantia de que os dados tenham sido gravados na maioria dos membros do conjunto de réplicas. Para obter mais informações, consulte a especificação Read Concern.
Linearizable()
A query retorna dados que refletem todas as escritas bem-sucedidas emitidas com uma write concern de majority e reconhecidas antes do início da operação de leitura. Para obter mais informações, consulte a especificação Read Concern.
Local()
A query retorna os dados mais recentes da instância. Para obter mais informações, consulte a especificação Read Concern.
Majority()
A query retorna os dados mais recentes da instância reconhecidos como tendo sido gravados para a maioria dos membros no conjunto de réplicas. Para obter mais informações, consulte a especificação Read Concern.
Snapshot()
A query retorna uma cópia completa dos dados em uma instância do mongod em um ponto específico no tempo. Disponível apenas para operações em transações de vários documentos. Para obter mais informações, consulte a especificação Read Concern.

O código a seguir mostra como você pode especificar uma read concern de "maioria". O código então seleciona um Collection com esta opção.

rc := readconcern.Majority()
opts := options.Collection().SetReadConcern(rc)
database := client.Database("db")
coll := database.Collection("myCollection", opts)

A opção de preferência de leitura especifica como o cliente MongoDB roteia as operações de leitura para os membros de um conjunto de réplica. Por padrão, um aplicativo direciona suas operações de leitura para o membro primário em um conjunto de réplicas.

A read preference consiste no modo de read preference e, opcionalmente, em uma lista de conjunto de tags, na opção maxStalenessSeconds e na opção de leituras distribuídas.

O driver Go do MongoDB fornece o pacote readpref, que permite especificar a preferência de leitura para um conjunto de réplicas. Defina a preferência de leitura usando o método SetReadPreference() com um tipo ReadPref. O tipo ReadPref tem os seguintes métodos para especificar a preferência de leitura:

Método
Descrição
Nearest()
O cliente lê de um nó aleatório qualificado do conjunto de réplicas, primário ou secundário, com base em um limite de latência especificado. Para obter mais informações, consulte a entrada manual do servidor MongoDB de preferência de leitura.
Primary()
O cliente lê a partir do nó primário do conjunto de réplicas atual. Para obter mais informações, consulte a entrada manual do servidor MongoDB de preferência de leitura.
PrimaryPreferred()
O cliente lê a partir do nó primário na maioria das situações. Se o primário não estiver disponível, as operações serão lidas dos nós secundários. Para obter mais informações, consulte a entrada manual do servidor MongoDB de preferência de leitura.
Secondary()
O cliente lê a partir dos nós secundários do conjunto de réplicas. Para obter mais informações, consulte a entrada manual do servidor MongoDB de preferência de leitura.
SecondaryPreferred()
O cliente lê a partir dos nós secundários na maioria das situações. Se os secundários não estiverem disponíveis, as operações serão lidas do nó primário. Para obter mais informações, consulte a entrada manual do servidor MongoDB de preferência de leitura.

Dica

Como alternativa, você pode especificar uma read preference em sua connection string. Consulte a entrada manual do servidor MongoDB em Opções de preferência de leitura para obter mais informações.

O código a seguir mostra como você pode especificar uma preferência de leitura para ler dos nós secundários. O código então seleciona um Database com essa opção.

rp := readpref.Secondary()
opts := options.Database().SetReadPreference(rp)
database := client.Database("db", opts)

Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação do servidor:

← Operações compostas