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 preocupação de gravação para um conjunto de réplicas. Defina a preocupação de gravação usando o método SetWriteConcern() com um tipo WriteConcern. O tipo WriteConcern tem os seguintes métodos para selecionar especificações comuns de problemas de gravação:
Método | Descrição |
|---|---|
| O cliente solicita confirmação de que as operações de gravação se propagam para nós com tag de uma instância |
| O cliente faz a solicitação de confirmação de que as operações de gravação são gravadas no registro no diário em disco. Para obter mais informações, consulte a especificação de write concern. |
| O cliente solicita o reconhecimento de que as operações de gravação se propagam para a maioria dos nós votantes portadores de dados. Para obter mais informações, consulte a especificação de write concern. |
| O cliente solicita que não haja confirmação das operações de gravação. Para obter mais informações, consulte a especificação de write concern para w: 0. |
| O cliente faz uma solicitação de confirmação de que cada operação de gravação foi gravada 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 de write concern para w: 1. |
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 |
|---|---|
| Especifica o número de instâncias de |
| Especifica se as operações de gravação devem ser gravadas no registro no diário em disco para confirmação. |
| Especifica um limite de tempo para a write concern. Essa configuração é aplicável somente para valores |
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)
Read concern
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: