Manual
PHP Manual

Preferencias de lectura

MongoDB 2.2 y la versión 1.3.0 del controlador añaden el soporte para » preferencias de lectura, que permiten controlar cuántas consultas son dirigidas a instancias de mongod en un entorno de conjunto de réplica. Las preferencias de lectura podrían especificarse en base a cada conexión, cada base de datos, o cada colección. Las preferencias definidas en un nivel más alto serán heredadas de forma predeterminada (p.ej. MongoCollection heredará las preferencias de lectura definidas en la instancia de MongoDB conrrespondiente).

Las preferencias de lectura son especificadas con una combinación de modos y conjuntos de etiquetas. Los modos determinan cómo se priorizan instancias, mientras que los » conjuntos de etiquetas especifican criterios para elegir instancias de mongod. Las instancias de mongod solamente son elegibles si el timepo de ping está dentro de 15ms desde la instancia de mongod más cercana.

Modos de preferencias de lectura

Advertencia

Todos los modos de preferencias de lectura excepto MongoClient::RP_PRIMARY podrían devolver datos antiguos, puesto que los secundarios replican operaciones del primario con alguna demora. Asegúrese de que su aplicación puede admitir datos antiguos si elige usar un modo distinto de MongoClient::RP_PRIMARY.

Conjuntos de etiquetas

Los » conjuntos de etiquetas permiten especificar criterios para que una aplicación pueda dirigir operaciones de lectura hacia miembros específicos, basándose en parámetros personalizados. Los conjuntos de etiquetas aseguran que las operaciones de lectura apunten a miembros de un centro de datos en particular o a instancias de mongod diseñadas para una clase de operaciones en concreto, tales como de información o análisis.

Se pueden especificar conjuntos de etiquetas con los siguientes modos de preferencia de lectura:

No se pueden especificar conjuntos de etiquetas con el modo de preferencia de lectura MongoClient::RP_PRIMARY. Las etiquetas se aplican solamente al seleccionar un miembro secundario de un conjunto, excepto para el cuándo en el modo más cercano.

Especificar preferencias de lectura

Las preferencias de lectura se pueden especificar en una URI proporcionada a MongoClient::__construct(), el cual utiliza una sintaxis decadena de consulta, o mediante métodos modificadores (setter) en las clases núcleo, que usan una sintaxis de array para los conjuntos de etiquetas.

Cuando se especifican los modos de preferencia de lectura en una cadena de consulta, los conjuntos de etiquetas para el valor readPreferenceTags deberían ser una secuencia delimitada por comas de pares clave/valor delimitados por dos puntos.

Nota:

Cada conjunto de etiquetas definida en la cadena de consulta utilizará el nombre readPreferenceTags. A diferencia de cómo PHP pudiera tratar cadenas de consulta de URL, los valores sucesivos para readPreferenceTags no se sobrescribirán. El controlador recopilará conjuntos de etiquetas en el orden en que aparecen en la cadena de consulta.

Advertencia

¡Si el controlador no puede encontrar un conjunto de etiquetas coincidente, la lectura fallará! Es su responsabilidad el proporcionar recursos adecuados, tales como un valor de readPreferenceTags vacío para recurrir a "no tag set preference".

Ejemplo #1 Preferencias de lectura de URI de coneción con sintaxis de cadena de consulta

<?php
// Preferir el servidor más cercano sin preferencia de etiqueta
$uri  'mongodb://rs1.example.com,rs2.example.com/';
$uri .= '?readPreference=nearest';
$m = new MongoClient($uri, array('replicaSet' => 'rs'));

// Elegir el servidor más cercano en el centro de datos "east"
$uri  'mongodb://rs1.example.com,rs2.example.com/';
$uri .= '?readPreference=nearest';
$uri .= '&readPreferenceTags=dc:east';
$m = new MongoClient($uri, array('replicaSet' => 'rs'));

// Preferir el servidor más cercano del centro de datos "east" también usado para información,
// pero recurrir a un servidor en el centro de datos "west"
$uri  'mongodb://rs1.example.com,rs2.example.com/';
$uri .= '?readPreference=nearest';
$uri .= '&readPreferenceTags=dc:east,use:reporting';
$uri .= '&readPreferenceTags=dc:west';
$m = new MongoClient($uri, array('replicaSet' => 'rs'));

// Preferir el servidor más cercano del centro de datos "east", luego un servidor del
// centro de datos "west", y finalmente recurrir a preferencia sin conjunto de etiquetas
$uri  'mongodb://rs1.example.com,rs2.example.com/';
$uri .= '?readPreference=nearest';
$uri .= '&readPreferenceTags=dc:east';
$uri .= '&readPreferenceTags=dc:west';
$uri .= '&readPreferenceTags=';
$m = new MongoClient($uri, array('replicaSet' => 'rs'));
?>

Ejemplo #2 Establecer las preferencias de lectura con sintaxis de array para conjuntos de etiquetas

<?php

$m 
= new MongoClient('mongodb://rs1.example.com,rs2.example.com', array(
    
'replicaSet' => 'rs',
));

// Preferir el servidor más cercano sin preferencia de etiqueta
$m->setReadPreference(MongoClient::RP_NEAREST, array());

// Elegir el servidor más cercano en el centro de datos "east"
$m->setReadPreference(MongoClient::RP_NEAREST, array(
    array(
'dc' => 'east'),
));

// Preferir el servidor más cercano del centro de datos "east" también usado para información,
// pero recurrir a un servidor en el centro de datos "west"
$m->setReadPreference(MongoClient::RP_NEAREST, array(
    array(
'dc' => 'east''use' => 'reporting'),
    array(
'dc' => 'west'),
));

// Preferir el servidor más cercano del centro de datos "east", luego un servidor del
// centro de datos "west", y finalmente recurrir a preferencia sin conjunto de etiquetas
$m->setReadPreference(MongoClient::RP_NEAREST, array(
    array(
'dc' => 'east'),
    array(
'dc' => 'west'),
    array(),
));
?>


Manual
PHP Manual