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
Leia este guia se precisar 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 Option
. O tipo Option
tem os seguintes métodos para especificar a preocupação de gravação:
Método | Descrição |
---|---|
J() | The client requests acknowledgement that write operations are written to the
journal. For more information, see the
Write Concern specification. Parameter: bool |
W() | The client requests acknowledgement that write operations propagate to the
specified number of mongod instances. For more information, see the
Write Concern specification.Parameter: int |
WMajority() | The client requests acknowledgement that write operations propagate to the
majority of mongod instances. For more information, see the
Write Concern specification.Parameter: none |
WTagSet() | The client requests acknowledgement that write operations propagate to the
specified mongod instance. For more
information, see the Write Concern specification.Parameter: string |
Dica
Como alternativa, você pode especificar uma preocupação de gravação em sua string de conexão. Consulte a entrada do Manual do servidor sobre Opções de preocupação de gravação para obter mais informações.
Exemplo
O código a seguir mostra como especificar um preocupação de gravação para solicitar a confirmação de dois membros do conjunto de réplicas. O código então cria um Client
com esta opção.
uri := "mongodb://<hostname>:<port>" wc := writeconcern.W(2) opts := options.Client().ApplyURI(uri).SetWriteConcern(writeconcern.New(wc)) client, err := mongo.Connect(context.TODO(), opts)
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 |
---|---|
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. |
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 |
---|---|
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 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 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 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 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 de preferência de leitura. |
Dica
Como alternativa, você pode especificar uma preferência de leitura em sua string de conexão. Consulte a entrada do Manual do servidor sobre 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: