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.

A preferĂȘncia de leitura consiste no modo de preferĂȘncia de leitura e, opcionalmente, em uma lista de conjunto de tags, na opção maxStalenessSeconds e na opção de leituras distribuĂ­das . A opção de leitura protegida estĂĄ disponĂ­vel para clusters fragmentados para leituras que usam preferĂȘncia de leitura nĂŁoprimary .

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.

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

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.

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

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:

A preferĂȘncia de leitura nearest oferece suporte a leituras distribuĂ­das em clusters fragmentados e ativa a opção de leitura distribuĂ­da por padrĂŁo.

Para obter uma descrição detalhada dos modos de preferĂȘncia de leitura, consulte Modos de preferĂȘncia de leitura.

  • Todos os modos de preferĂȘncia de leitura, exceto primary, podem retornar dados obsoletos porque os secundĂĄrios replicam as operaçÔes do primĂĄrio em um processo assĂ­ncrono. [1] Certifique-se de que seu aplicativo possa tolerar dados obsoletos se vocĂȘ optar por usar um modo nĂŁo-primary.

  • 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

Todas as operaçÔes de leitura usam somente o conjunto de réplicas primårio atual. [1] Este é o modo de leitura padrão. Se o primårio não estiver disponível, as operaçÔes de leitura produzem um erro ou geram uma exceção.

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.

Quando a preferĂȘncia de leitura primaryPreferred inclui um valor de maxStalenessSeconds e nĂŁo hĂĄ nenhum primĂĄrio do qual ler, o cliente estima o quĂŁo obsoleto cada secundĂĄrio estĂĄ comparando a Ășltima gravação do secundĂĄrio com a do secundĂĄrio com a gravação mais recente. Em seguida, o cliente direcionarĂĄ a operação de leitura para um secundĂĄrio cujo atraso estimado seja menor ou igual a 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

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

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.

Quando a preferĂȘncia de leitura secondaryPreferred 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 Ă© 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 a comparação. Se nĂŁo houver secundĂĄrios com atraso estimado menor ou igual a maxStalenessSeconds, o cliente direcionarĂĄ a operação de leitura para o primĂĄrio do conjunto de rĂ©plicas.

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

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

nearest

O driver lĂȘ de um membro cuja latĂȘncia de rede recai dentro da janela de latĂȘncia aceitĂĄvel. As leituras no modo nearest nĂŁo consideram se um membro Ă© um primĂĄrio ou secundĂĄrio ao rotear operaçÔes de leitura: primĂĄrios e secundĂĄrios sĂŁo tratados de forma equivalente.

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

A preferĂȘncia de leitura nearest, por padrĂŁo, especifica o uso de leituras distribuĂ­das para leituras em um cluster fragmentado.

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.

Ao usar um driver do MongoDB, Ă© possĂ­vel especificar a preferĂȘncia de leitura usando a API de preferĂȘncia de leitura do driver. Consulte a documentação da API do driver. VocĂȘ tambĂ©m pode definir a preferĂȘncia de leitura (exceto para a opção de leitura protegida) ao se conectar ao conjunto de rĂ©plicas ou ao cluster fragmentado. Por exemplo, consulte string de conexĂŁo.

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

Ao usar mongosh, consulte cursor.readPref() e 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.

    • Nem todas as versĂ”es do driver suportam operaçÔes $merge enviadas aos nĂłs secundĂĄrios. Para obter detalhes, consulte a documentação do driver.

  • 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.