Visão geral
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.
Escreva preocupação
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.
Opções
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 |
---|---|
| The client requests acknowledgement that write operations propagate to
tagged members of a mongod instance. For more
information, see the Write Concern specification.Parameter: string |
| The client requests acknowledgement that write operations are
written to the on-disk journal. For more information, see the
Write Concern specification. Parameter: none |
| The client requests acknowledgement that write operations propagate to the
majority of data-bearing voting members. For more information, see the
Write Concern specification. Parameter: none |
| The client requests requests no acknowledgment of write
operations. For more information, see the
Write Concern specification for w: 0. Parameter: none |
| The client requests acknowledgement that write operations have
been written to memory on one node, such as the standalone mongod or
the primary in a replica set. For more
information, see the Write Concern specification for w: 1. Parameter: none |
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 |
---|---|
| Specifies the number of mongod instances or tagged members
that write operations must propagate to for acknowledgement. Common values include
1 , 0 , and "majority" .Type: string or int |
| Specifies if write operations must be written to the on-disk
journal for acknowledgement. Type: bool |
| Specifies a time limit for the write concern. This setting is
applicable only for W values greater than 1. Specifying this
setting and specifying a Timeout on the client at the same time
results in undefined behavior. To learn more, see the
Write Concern specification for wtimeout.Type: 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.
Exemplo
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)
Preocupação de leitura
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.
Opções
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 |
---|---|
| 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. |
| A query retorna dados que refletem todas as escritas bem-sucedidas emitidas com uma write concern de |
| A query retorna os dados mais recentes da instância. Para obter mais informações, consulte a especificação Read Concern. |
| 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. |
| A query retorna uma cópia completa dos dados em uma instância do |
Exemplo
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)
readPreference
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.
Opções
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 |
---|---|
| 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. |
| 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. |
| 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. |
| 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. |
| 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.
Exemplo
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)
Informações adicionais
Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação do servidor: