Inicio » MongoDB » Las opciones de lectura en los Set de Replica de MongoDB

Las opciones de lectura en los Set de Replica de MongoDB

Por defecto, las operaciones de lectura se hacen sobre el nodo primario y son consistentes con la última operación de escritura

Pero se puede configurar las opciones de lectura para permitir que se pueda leer en los nodos secundarios, esto puede provocar lo que se llama consistencia eventual, que significa que es posible que no todas las operaciones de escritura hayan llegado a los nodos secundarios, con lo cual los datos que regresen las consultas no contienen las últimas modificaciones.

Para garantizar la consistencia en la lectura en los nodos secundarios, se puede configurar el cliente y el driver para asegurar que la operación no se de como exitosa hasta que haya sido propaganda a todos los miembros secundarios del Set de Replica. Este tipo de configuración evita los rollback durante la caída de uno de los nodos de la réplica.

De todas formas hay que tener en cuenta que si lo que se necesita un poca latencia en escritura y lectura, se debe configurar un sharding, a pesar de que en los data set se puede jugar con las opciones de lectura y escritura, están diseñados para escribir en un solo lugar, el nodo primario. Si forzamos a que la escritura se tenga que propagar a los otros nodos antes de darla como correcta, podremos leer de los secundarios con una menor latencia, pero tendremos una mayor latencia en la escritura. Si la aplicación no necesita consistencia de datos las opciones de lectura pueden ser una solución.

Los driver de mongo permiten a los clientes configurar las preferencias de lectura en las conexiones, en las colecciones o por operación.

Los driver de MongoDB aceptan 5 opciones de lectura:

  •         primary
  •         primaryPreferred
  •         secondary
  •         secondaryPreferred
  •         nearest

La sintaxis  para cada modo de lectura es específica del driver y del lenguaje del cliente. Estás opciones de lectura están también disponibles para cluster shardeed. En el Shell de mongo el método readPref() es que se encarga establecer las opciones.

Todas las opciones excepto primary implican consistencia eventual.

Primary

Todas las operaciones de lectura utilizan únicamente el nodo primario. Este es el comportamiento por defecto, si el nodo primario deja de estar operativo las operaciones de lectura lanzan un error.

primaryPreferred

En la mayoría de las situaciones, las operaciones de lectura se hacen sobre el nodo primario. Sin embargo si el nodo primario no está disponible las operaciones de lectura se pueden hacer sobre otros nodos.

Cuando las opciones de lectura incluyen un “tag set”, el cliente lee el primero el primario si está disponible y luego los secundarios que coinciden con el tag especificado. Si no hay secundarios con ese tag se produce un error.

secondary

Las operaciones de lectura se hacen solo sobre el nodo secundario. Si no hay secundarios disponibles, la operación de lectura provoca un error.

Cuando las opciones de lectura incluyen un tag set, el cliente intenta encontrar un miembro secundario que coincida con las opciones especificadas, y redirecciones de forma aleatoria la lectura a ese nodo.

SencondaryPreferred

En la mayoría de las situaciones leerá de uno de los nodos secundarios, pero en las situaciones donde solo haya un nodo primario y no nodos secundarios, leerá del primario.

Nearest

Con esta opción la petición se manda la miembro del data set con la con la menor latencia, basándose en una media del tiempo que tarda en hacer ping desde el driver a los distintos componentes del set de réplica.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s