Modificar execução de operações CRUD
Nesta página
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 |
Dica
Tempo limite de write concern
Você não pode definir um tempo limite em uma WriteConcern
instância . Em vez disso, defina o tempo limite no nível de operação usando o WithTimeout()
método ao criar um contexto. Para saber mais, consulte Configuração de tempo limite único no guia Opções de conexão.
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 |
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(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: