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

readPreference

A preferĂȘncia de leitura descreve como os clientes MongoDB direcionam as operaçÔes de leitura para os membros de um conjunto de rĂ©plica.

OperaçÔes de leitura para um conjunto de rĂ©plicas mostrando o roteamento de preferĂȘncia de leitura padrĂŁo e ``nearest``.
clique para ampliar

Por padrĂŁo, um aplicativo direciona suas operaçÔes de leitura para o membro primĂĄrio em um conjunto de rĂ©plicas (ou seja, modo de preferĂȘncia de leitura "primary"). Mas os clientes podem especificar uma preferĂȘncia de leitura para enviar operaçÔes de leitura para secundĂĄrios.

Read preference consists of the read preference mode and optionally, a tag set list, the maxStalenessSeconds option, and the hedged read option. Hedged read option is available for sharded clusters for reads that use non-primary read preference.

A tabela a seguir resume os modos de read preference:

Observação

Os modos de preferĂȘncia de leitura nĂŁoprimary suportam leitura distribuĂ­da em clusters fragmentados.

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.

Read preference primaryPreferred supports hedged reads on sharded clusters.

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

A preferĂȘncia de leitura secondary Ă© compatĂ­vel com leituras distribuĂ­das em clusters fragmentados.

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.

Read preference secondaryPreferred supports hedged reads on sharded clusters.

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:

Read preference nearest supports hedged reads on sharded clusters and enables the hedged read option by default.

For detailed description of the read preference modes, see Read Preference Modes.

  • All read preference modes except primary may return stale data because secondaries replicate operations from the primary in an asynchronous process. [1] Ensure that your application can tolerate stale data if you choose to use a non-primary mode.

  • A preferĂȘncia de leitura nĂŁo afeta a visibilidade dos dados. Os clientes podem ver os resultados das gravaçÔes antes que elas sejam reconhecidas ou propagadas para a maioria dos membros do conjunto de rĂ©plicas. Para obter detalhes, consulte Isolamento de leitura, consistĂȘncia e recĂȘncia.

  • A read preference nĂŁo afeta a consistĂȘncia causal. As garantias de consistĂȘncia causal fornecidas por sessĂ”es causalmente consistentes para operaçÔes de leitura com read concern "majority" e operaçÔes de gravação com write concern "majority" sĂŁo mantidas em todos os membros da implantação do MongoDB.

Aviso

Leituras secundårias em um cluster fragmentado com migraçÔes podem perder documentos

As leituras secundårias de longa duração em um cluster fragmentado podem perder documentos se estiverem ocorrendo migraçÔes.

Antes de excluir uma parte durante a migração de parte, o MongoDB aguarda que as queries em andamento envolvendo a parte sejam concluídas no fragmento primårio e, em seguida, aguarda mais orphanCleanupDelaySecs segundos. As queries que foram inicialmente executadas em um nó que era primårio, mas continuam depois que o nó passa para secundårio, serão tratadas como se fossem inicialmente executadas em um secundårio. Ou seja, o servidor só aguarda orphanDelayCleanupSecs se não houver queries direcionando a parte no primårio atual.

As queries que tĂȘm como alvo a parte e sĂŁo executadas em rĂ©plicas secundĂĄrias podem perder documentos se levarem mais de orphanCleanupDelaySecs.

primary

All read operations use only the current replica set primary. [1] This is the default read mode. If the primary is unavailable, read operations produce an error or throw an exception.

O modo de read preference primary nĂŁo Ă© compatĂ­vel com modos de read preference que utilizam listas de conjunto de tags ou maxStalenessSeconds. Se vocĂȘ especificar listas de conjuntos de tags ou um valor maxStalenessSeconds com primary, o driver produzirĂĄ um erro.

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Ăł.

primaryPreferred

Na maioria das situaçÔes, as operaçÔes são lidas do nó primårio do conjunto. No entanto, se o primårio não estiver disponível, como é o caso em situaçÔes de failover, as operaçÔes são lidas de nós secundårios que satisfazem as read preferences demaxStalenessSeconds e as listas de conjuntos de tags.

When the primaryPreferred read preference includes a maxStalenessSeconds value and there is no primary from which to read, the client estimates how stale each secondary is by comparing the secondary's last write to that of the secondary with the most recent write. The client then directs the read operation to a secondary whose estimated lag is less than or equal to maxStalenessSeconds.

Quando a read preference inclui uma lista de conjuntos de tags (um array de conjuntos de tags) e nĂŁo hĂĄ um primary do qual ler, o cliente tenta encontrar membros secundĂĄrios com tags correspondentes (tentando os conjuntos de tags em ordem atĂ© encontrar uma correspondĂȘncia). Quando sĂŁo encontrados secundĂĄrios correspondentes, o cliente seleciona um secundĂĄrio aleatĂłrio do grupo mais prĂłximo de secundĂĄrios correspondentes. Se nenhum secundĂĄrio tiver tags correspondentes, a operação de leitura produz um erro.

Quando a read preference inclui um valor maxStalenessSeconds e uma lista de conjuntos de tags, o cliente filtra primeiro por obsolescĂȘncia e, em seguida, pelas tags especificadas.

As operaçÔes de leitura utilizando o modo primaryPreferred podem retornar dados obsoletos. Use a opção maxStalenessSeconds para evitar a leitura de secundårios que o cliente estima estarem excessivamente obsoletos.

Observação

Read preference primaryPreferred supports hedged reads on sharded clusters.

secondary

As operaçÔes são lidas somente dos membros secundårios do conjunto. Se nenhum secundårio estiver disponível, essa operação de leitura produz um erro ou exceção.

A maioria dos conjuntos de réplicas tem pelo menos um secundårio, mas hå situaçÔes em que pode não haver um secundårio disponível. Por exemplo, um conjunto de réplicas com um primary, um secundårio e um arbiter pode não ter nenhum secundårio se um membro estiver em estado de recuperação ou indisponível.

Quando a preferĂȘncia de leitura secondary inclui um valor maxStalenessSeconds, o cliente estima a obsolescĂȘncia de cada secundĂĄrio comparando a Ășltima gravação do secundĂĄrio com a do primĂĄrio. Em seguida, o cliente direcionarĂĄ a operação de leitura para um secundĂĄrio cujo atraso estimado seja menor ou igual a maxStalenessSeconds. Se nĂŁo houver um primĂĄrio, o cliente usarĂĄ o secundĂĄrio com a gravação mais recente para comparar.

Quando a read preference inclui uma lista de conjuntos de tags (um array de conjuntos de tags), o cliente tenta encontrar membros secundĂĄrios com tags correspondentes (tentando os conjuntos de tags em ordem atĂ© encontrar uma correspondĂȘncia). Quando sĂŁo encontrados secundĂĄrios correspondentes, o cliente seleciona um secundĂĄrio aleatĂłrio do grupo mais prĂłximo de secundĂĄrios correspondentes. Se nenhum secundĂĄrio tiver tags correspondentes, a operação de leitura produz um erro.

Quando a read preference inclui um valor maxStalenessSeconds e uma lista de conjuntos de tags, o cliente filtra primeiro por obsolescĂȘncia e, em seguida, pelas tags especificadas.

As operaçÔes de leitura utilizando o modo secondary podem retornar dados obsoletos. Use a opção maxStalenessSeconds para evitar a leitura de secundårios que o cliente estima estarem excessivamente obsoletos.

Observação

A preferĂȘncia de leitura secondary Ă© compatĂ­vel com leituras distribuĂ­das em clusters fragmentados.

secondaryPreferred

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.

When the secondaryPreferred read preference includes a maxStalenessSeconds value, the client estimates how stale each secondary is by comparing the secondary's last write to that of the primary. The client then directs the read operation to a secondary whose estimated lag is less than or equal to maxStalenessSeconds. If there is no primary, the client uses the secondary with the most recent write for the comparison. If there are no secondaries with estimated lag less than or equal to maxStalenessSeconds, the client directs the read operation to the replica set's primary.

Quando a read preference inclui uma lista de conjuntos de tags (um array de conjuntos de tags), o cliente tenta encontrar membros secundĂĄrios com tags correspondentes (tentando os conjuntos de tags em ordem atĂ© encontrar uma correspondĂȘncia). Quando sĂŁo encontrados secundĂĄrios correspondentes, o cliente seleciona um secundĂĄrio aleatĂłrio do grupo mais prĂłximo de secundĂĄrios correspondentes. Se nenhum secundĂĄrio tiver tags correspondentes, o cliente ignora as tags e leituras do primary.

Quando a read preference inclui um valor maxStalenessSeconds e uma lista de conjuntos de tags, o cliente filtra primeiro por obsolescĂȘncia e, em seguida, pelas tags especificadas.

As operaçÔes de leitura utilizando o modo secondaryPreferred podem retornar dados obsoletos. Use a opção maxStalenessSeconds para evitar a leitura de secundårios que o cliente estima estarem excessivamente obsoletos.

Observação

Read preference secondaryPreferred supports hedged reads on sharded clusters.

nearest

The driver reads from a member whose network latency falls within the acceptable latency window. Reads in the nearest mode do not consider whether a member is a primary or secondary when routing read operations: primaries and secondaries are treated equivalently.

Defina esse modo para minimizar o efeito da latĂȘncia de rede nas operaçÔes de leitura sem preferĂȘncia por dados atuais ou obsoletos.

Quando a read preference inclui um valor maxStalenessSeconds, o cliente estima o quanto cada secundĂĄrio estĂĄ obsoleto comparando a Ășltima gravação do secundĂĄrio com a do primary, se disponĂ­vel, ou com o secundĂĄrio com a gravação mais recente se nĂŁo houver nenhum primary. Em seguida, o cliente filtra qualquer secundĂĄrio cuja defasagem estimada seja maior que maxStalenessSeconds e direciona aleatoriamente a leitura para um membro restante (primary ou secundĂĄrio) cuja latĂȘncia de rede esteja dentro da janela de latĂȘncia aceitĂĄvel.

Se vocĂȘ especificar uma lista de conjuntos de tags, o cliente tentarĂĄ encontrar um membro do conjunto de rĂ©plicas que corresponda Ă s listas de conjuntos de tags especificadas e direcionarĂĄ as leituras para um membro arbitrĂĄrio do grupo mais prĂłximo.

Quando a read preference inclui um valor maxStalenessSeconds e uma lista de conjuntos de tags, o cliente filtra primeiro por obsolescĂȘncia e, em seguida, pelas tags especificadas. Das instĂąncias mongod restantes, o cliente direciona aleatoriamente a leitura para uma instĂąncia que esteja dentro da janela de latĂȘncia aceitĂĄvel. A documentação da seleção de membro da read preference descreve o processo em detalhes.

As operaçÔes de leitura utilizando o modo nearest podem retornar dados obsoletos. Use a opção maxStalenessSeconds para evitar a leitura de secundårios que o cliente estima estarem excessivamente obsoletos.

Observação

Read preference nearest, by default, specifies the use of hedged reads for reads on a sharded cluster.

Dica

Para saber mais sobre casos de uso de configuraçÔes especĂ­ficas de preferĂȘncias de leitura, consulte Casos de uso de preferĂȘncias de leitura.

When using a MongoDB driver, you can specify the read preference using the driver's read preference API. See the driver API documentation. You can also set the read preference (except for the hedged read option) when connecting to the replica set or sharded cluster. For an example, see connection string.

Para uma determinada preferĂȘncia de leitura, os drivers MongoDB usam a mesma lĂłgica de seleção de membros.

When using mongosh, see cursor.readPref() and Mongo.setReadPref().

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Ăł.

Considere os seguintes pontos ao usar os estågios $merge ou $out em um pipeline de agregação:

  • A partir do MongoDB 5.0, os pipelines com um estĂĄgio $merge poderĂŁo ser executados em nĂłs secundĂĄrios do conjunto de rĂ©plicas se todos os nĂłs do cluster tiverem a featureCompatibilityVersion definida como 5.0 ou superior e a preferĂȘncia de leitura permitir leituras secundĂĄrias.

    • $merge e os estĂĄgios $out sĂŁo executados em nĂłs secundĂĄrios, mas as operaçÔes de gravação sĂŁo enviadas para o nĂł primĂĄrio.

    • Not all driver versions support $merge operations sent to the secondary nodes. For details, see the driver documentation.

  • nas versĂ”es anteriores do MongoDB , os pipelines com estĂĄgios $out ou $merge sempre sĂŁo executados no nĂł principal, e a preferĂȘncia de leitura nĂŁo Ă© considerada.

Para as operaçÔes mapReduce, somente as operaçÔes "inline" mapReduce que não gravam dados são compatíveis com a read preference. Caso contrårio, as operaçÔes mapReduce serão executadas no nó primårio.

[1](1, 2)

Em alguns casos, dois nĂłs em um conjunto de rĂ©plicas podem acreditar transitoriamente que sĂŁo os primĂĄrios, mas somente um deles poderĂĄ realizar gravaçÔes com restrição de gravação { w: "majority" }. O nĂł que consegue realizar gravaçÔes { w: "majority" } Ă© o primĂĄrio atual, e o outro nĂł Ă© um antigo primĂĄrio 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 poderĂŁo ver dados obsoletos, apesar de terem solicitado uma preferĂȘncia de leitura primary, e novas gravaçÔes no antigo primĂĄrio acabarĂŁo sendo revertidas.