Read preference determina qué miembros de un replica set pueden atender una lectura. No define qué estado es visible —eso pertenece a read concern— y tampoco garantiza que leer de secondaries mejore rendimiento.
Texto
read preference
→ primary o secondaries elegibles
read concern
→ garantía de visibilidad
Prefiere primary y usa secondary si el primary no está disponible. Puede cambiar la frescura durante incidentes, por lo que la aplicación debe tolerar esa degradación.
Selecciona miembros elegibles basándose en la ventana de latencia observada, no en distancia geográfica literal ni en frescura. Puede elegir un secondary atrasado.
Opciones de max staleness permiten descartar secondaries demasiado atrasados bajo restricciones y mínimos dependientes de versión. No sustituyen monitoreo del lag ni garantizan cero staleness.
Las transacciones tienen restricciones sobre read preference; normalmente necesitan primary. Verifica driver y servidor antes de configurar preferencias globales que interfieran con sesiones transaccionales.
El driver mantiene una descripción de topología y selecciona servidores dentro de una latency window. “Nearest” no garantiza siempre el nodo con menor tiempo de respuesta para cada request ni considera carga de la query.
Read preference es routing, no una garantía de consistencia ni una optimización automática. Secondaries pueden descargar algunas lecturas, pero añaden staleness y carga operacional. El modo debe elegirse por caso de uso, junto con read concern, sessions, topología y tolerancia a fallos.
Comprueba lo aprendido
¿Qué diferencia existe entre primaryPreferred y secondaryPreferred?