Para agentes de IA: um Ă­ndice de documentação estĂĄ disponĂ­vel em https://www.mongodb.com/pt-br/docs/llms.txt — as versĂ”es de markdown de todas as pĂĄginas estĂŁo disponĂ­veis anexando .md a qualquer caminho de URL.
Menu Docs

Ler casos de uso de preferĂȘncias

O seguinte documento explica casos de uso comuns para vĂĄrios modos de preferĂȘncia de leitura, bem como contraindicaçÔes descrevendo quando vocĂȘ nĂŁo deve alterar a preferĂȘncia de leitura do primary padrĂŁo.

Modo de preferĂȘncia de leitura
Descrição

Modo padrão. Todas as operaçÔes são lidas a partir do conjunto de réplicas atual principal.

As transaçÔes que contĂȘm operaçÔes de leitura devem usar a preferĂȘncia de leitura primary. Todas as operaçÔes em uma determinada transação devem ser roteadas para o mesmo nĂł.

Na maioria das situaçÔes, as operaçÔes são lidas a partir do principal, mas se estiverem indisponíveis, as operaçÔes são lidas de nós secundårios.

Todas as operaçÔes são lidas a partir dos nós secundårios do conjunto de réplica.

OperaçÔes normalmente leem dados de nĂłs secundĂĄrios do conjunto de rĂ©plica. Se o conjunto de rĂ©plica tiver somente um Ășnico nĂł primĂĄrio e nenhum outro nĂł, as operaçÔes lerĂŁo os dados do nĂł primĂĄrio.

As operaçÔes lidas de um nĂł aleatĂłrio qualificado do conjunto de rĂ©plicas, independentemente de esse nĂł ser primĂĄrio ou secundĂĄrio, com base em um limite de latĂȘncia especificado. A operação considera o seguinte ao calcular latĂȘncia:

Confira a seguir casos de uso comuns para usar modos de read preference nĂŁo primary:

  • Execução de operaçÔes de sistemas que nĂŁo afetam o aplicativo front-end.

    Observação

    As read preferences nĂŁo sĂŁo relevantes para conexĂ”es diretas com uma Ășnica instĂąncia do mongod. No entanto, para executar operaçÔes de leitura em uma conexĂŁo direta com um membro secundĂĄrio de um conjunto de rĂ©plicas, Ă© necessĂĄrio definir uma read preference, como secundĂĄria.

  • Fornecimento de leituras locais para aplicativos distribuĂ­dos geograficamente.

    Se vocĂȘ tiver servidores de aplicativos em vĂĄrios centros de dados, considere ter um conjunto de rĂ©plicas distribuĂ­do geograficamente e usar uma preferĂȘncia de leitura nĂŁo primĂĄria ou nearest. Isso permite que o cliente leia a partir dos membros de menor latĂȘncia, em vez de sempre ler a partir do principal.

  • Como manter a disponibilidade durante um failover.

    Use primaryPreferred se quiser que um aplicativo leia a partir do primĂĄrio em circunstĂąncias normais, mas permita leituras obsoletas dos secundĂĄrios quando o primĂĄrio nĂŁo estiver disponĂ­vel.

Em geral, nĂŁo use secondary e secondaryPreferred para fornecer capacidade extra para leituras, porque:

  • Todos os membros de uma rĂ©plica tĂȘm trĂĄfego de gravação aproximadamente equivalente; com isso, os secundĂĄrios servirĂŁo leituras aproximadamente na mesma taxa que o primĂĄrio.

  • A replicação Ă© assĂ­ncrona e hĂĄ algum atraso entre uma operação de gravação bem-sucedida e sua replicação para secundĂĄrios. A leitura de um secundĂĄrio pode retornar dados obsoletos; A leitura de diferentes secundĂĄrios pode resultar em leituras nĂŁo monotĂŽnicas.

    Observação

    Os clientes podem usar SessĂ”es de cliente e garantias de consistĂȘncia causal para garantir leituras monotĂŽnicas.

  • A distribuição de operaçÔes de leitura para secundĂĄrios pode comprometer a disponibilidade se qualquer membro do conjunto ficar indisponĂ­vel porque os membros restantes do conjunto precisam ser capazes de lidar com todas as solicitaçÔes do aplicativo.

A fragmentação aumenta a capacidade de leitura e gravação ao distribuir as operaçÔes de leitura e gravação em um grupo de måquinas e, geralmente, é uma estratégia melhor para aumentar a capacidade.

Consulte Algoritmo de seleção de servidor para obter mais informaçÔes sobre a aplicação interna das preferĂȘncias de leitura.

Para evitar leituras obsoletas, use primary preferĂȘncia de leitura e "majority" readConcern. Se o primĂĄrio nĂŁo estiver disponĂ­vel, por exemplo, durante as eleiçÔes ou quando a maioria do conjunto de rĂ©plicas nĂŁo estiver acessĂ­vel, as operaçÔes de leitura usando primary preferĂȘncia de leitura produzirĂŁo um erro ou lançarĂŁo uma exceção.

Em algumas circunstùncias, pode ser possível que um conjunto de réplicas tenha temporariamente duas primårias; no entanto, apenas uma primåria serå capaz de confirmar gravaçÔes com a write concern "majority".

  • Uma partição de rede parcial pode segregar uma primĂĄria (P antigo) em uma partição com uma minoria dos nĂłs, enquanto o outro lado da partição contĂ©m a maioria dos nĂłs. A partição com a maioria elegerĂĄ uma nova primĂĄria (P nova), mas por um breve perĂ­odo, a primĂĄria antiga (P antigo) ainda pode continuar a servir leituras e gravaçÔes, pois ainda nĂŁo detectou que sĂł pode ver uma minoria de nĂłs no conjunto de rĂ©plicas.Durante esse perĂ­odo, se a primĂĄria antiga (P antiga) ainda estiver visĂ­vel para os clientes como principal, as leituras dessa primĂĄria podem refletir dados obsoletos.

  • uma primĂĄria (P antiga) pode deixar de responder, o que desencadearĂĄ uma eleição e uma nova primĂĄria (P nova) poderĂĄ ser eleita, servindo leituras e gravaçÔes.Se a primĂĄria que nĂŁo responde (P antiga) começar a responder novamente, duas primĂĄrias ficarĂŁo visĂ­veis por um breve perĂ­odo.O breve perĂ­odo terminarĂĄ quando P antiga parar de funcionar. No entanto, durante um breve perĂ­odo, os clientes podem ler a antiga primĂĄria P antiga, que pode fornecer dados obsoletos.

Para aumentar a consistĂȘncia, vocĂȘ pode desabilitar o failover automĂĄtico; no entanto, desabilitar o failover automĂĄtico sacrifica a disponibilidade.

Para permitir operaçÔes de leitura, quando possĂ­vel, use primaryPreferred. Quando houver um primary, vocĂȘ obterĂĄ leituras consistentes [1], mas se nĂŁo houver um primary, vocĂȘ ainda poderĂĄ fazer uma query dos secundĂĄrios. No entanto, ao usar esse modo de leitura, considere a situação descrita em secondary vs secondaryPreferred.

[1]

Em algumas circunstĂąncias, dois nĂłs em um conjunto de rĂ©plicas podem acreditar transitoriamente que sĂŁo os principais, mas, no mĂĄximo, um deles poderĂĄ concluir gravaçÔes com a preocupação de gravação { w: "majority" }. O nĂł que puder completar { w: "majority" } gravaçÔes serĂĄ o primĂĄrio atual e o outro nĂł serĂĄ um primĂĄrio antigo que ainda nĂŁo reconheceu seu rebaixamento, normalmente devido a uma partição de rede. Quando isso ocorre, os clientes que se conectam ao antigo primĂĄrio podem observar dados obsoletos, apesar de terem solicitado a preferĂȘncia de leitura primary e novas gravaçÔes no primĂĄrio antigo acabarĂŁo sendo revertidas.

Para sempre ler a partir de um nĂł de baixa latĂȘncia, use nearest. O driver ou mongos farĂĄ a leitura a partir do membro mais prĂłximo e daqueles que estiverem a no mĂĄximo 15 milissegundos [2] de distĂąncia do membro mais prĂłximo.

nearest nĂŁo garante consistĂȘncia. Se o membro mais prĂłximo do seu servidor de aplicativos for uma secundĂĄria com algum atraso de replicação, as consultas poderĂŁo retornar dados obsoletos. nearest reflete apenas a distĂąncia da rede e nĂŁo reflete a carga de E/S ou CPU.

[2] Este limite é configuråvel. Consulte localPingThresholdMs para mongos ou a documentação do driver para obter a configuração apropriada.

Se os membros de um conjunto de rĂ©plicas estiverem geograficamente distribuĂ­dos, vocĂȘ poderĂĄ criar marcaçÔes de rĂ©plicas baseadas que reflitam a localização da instĂąncia e, entĂŁo, configurar seu aplicativo para realizar consultas dos membros prĂłximos.

Por exemplo, se os membros dos centros de dados "leste" e "oeste" estiverem marcados {'dc': 'east'} como e {'dc': 'west'}, seus servidores de aplicativos no centro de dados leste poderĂŁo ler de membros prĂłximos com a seguinte preferĂȘncia de leitura:

db.collection.find().readPref('nearest', [ { 'dc': 'east' } ])

Embora o nearest jĂĄ favoreça membros com baixa latĂȘncia de rede, incluir a tag torna a escolha mais previsĂ­vel.

Para queries dedicadas específicas (por exemplo, ETL, relatórios), é possível transferir a carga de leitura do primary usando o modo de read preference secondary. Para esse caso de uso, o modo secondary é preferível ao modo secondaryPreferred, pois secondaryPreferred arrisca a seguinte situação: se todos os secundårios estiverem indisponíveis e seu conjunto de réplicas tiver arbiters [3] suficientes para evitar que o primary caia, o primary receberå todo o tråfego dos clientes. Se o primary não conseguir lidar com essa carga, as queries competirão com as escritas. Por esse motivo, use a read preference secondary para distribuir essas queries dedicadas específicas em vez de secondaryPreferred.

[3] Em geral, evite implantar ĂĄrbitros em conjuntos de rĂ©plicas e, em vez disso, use um nĂșmero Ă­mpar de nĂłs portadores de dados. Se vocĂȘ precisar implantar ĂĄrbitros, evite implantar mais de um ĂĄrbitro por conjunto de rĂ©plicas.