Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Configurar las operaciones CRUD

En esta guía, podrás aprender cómo configurar las opciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura para modificar la forma en que la librería PHP de MongoDB ejecuta las operaciones de crear, leer, actualizar y borrar (CRUD) en los sets de réplicas.

Puedes establecer las opciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura en los siguientes niveles:

  • Cliente, que establece el por defecto para todas las ejecuciones de operaciones, a menos que se anule

  • sesión

  • transacción

  • Database

  • Colección

Esta lista también indica el orden creciente de precedencia de la configuración de opciones. Por ejemplo, si estableces un nivel de consistencia de lectura para una transacción, este anulará un nivel de consistencia de lectura heredado del cliente.

Estas opciones permiten personalizar la coherencia causal y la disponibilidad de los datos en tus sets de réplicas. Para ver una lista completa de las opciones de preferencia de lectura, nivel de consistencia de lectura y nivel de confirmación de escritura (write concern), consulta las siguientes guías en el manual del MongoDB Server:

  • preferencia de lectura

  • readConcern

  • Nivel de confirmación de escritura

Puedes controlar cómo la librería dirige las operaciones de lectura estableciendo una preferencia de lectura. También puedes controlar cómo la librería espera el reconocimiento de las operaciones de lectura y escritura en un set de réplicas configurando los niveles de confirmación de lectura y el nivel de confirmación de escritura (write concern).

Esta sección muestra cómo configurar la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) en varios niveles pasando un parámetro de arreglo de opciones a cualquiera de los siguientes métodos:

Este ejemplo muestra cómo establecer la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de un MongoDB\Client instancia pasando un arreglo al constructor. El código configura la siguiente configuración:

  • secondary preferencia de lectura: Las operaciones de lectura recuperan datos de miembros secundarios del conjunto de réplicas

  • local nivel de consistencia de lectura: Las operaciones de lectura devuelven los datos más recientes de la instancia sin garantizar que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas

  • 2 nivel de confirmación de escritura (write concern): el primario/a y uno secundario del set de réplicas debe confirmar la operación de escritura

$clientOptions = [
'readPreference' => 'secondary',
'readConcernLevel' => 'local',
'w' => '2',
];
$client = new Client('mongodb://localhost:27017', $clientOptions);

Alternativamente, se pueden especificar los ajustes de lectura y guardado en el URI de conexión, que se pasa como un parámetro al constructor MongoDB\Client:

$uri = 'mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2';
$client = new Client($uri);

Nota

Las opciones de cliente readPreference, readConcernLevel y w aceptan valores de string. Al configurar los ajustes de lectura y guardado en cualquier otro nivel, deberás asignar valores de tipo MongoDB\Driver\ReadPreference, MongoDB\Driver\ReadConcern y MongoDB\Driver\WriteConcern a las opciones correspondientes.

Este ejemplo muestra cómo establecer la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de una sesión al pasar un arreglo al método startSession(). El código configura los siguientes ajustes:

  • PRIMARY_PREFERRED preferencia de lectura: Las operaciones de lectura recuperan datos desde el miembro principal del set de réplicas, o desde miembros secundarios si el principal no está disponible.

  • LOCAL nivel de consistencia de lectura: Las operaciones de lectura devuelven los datos más recientes de la instancia sin garantizar que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas

  • MAJORITY nivel de confirmación de escritura (write concern): La mayoría de todos los miembros del conjunto de réplicas deben reconocer la operación de escritura

$sessionOptions = [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::LOCAL),
'writeConcern' => new WriteConcern(WriteConcern::MAJORITY),
];
$session = $client->startSession($sessionOptions);

Este ejemplo muestra cómo establecer la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de una transacción pasando un arreglo al método startTransaction(). El código configura la siguiente configuración:

  • PRIMARY preferencia de lectura: las operaciones de lectura recuperan datos del miembro principal del set de réplicas

  • MAJORITY nivel de consistencia de lectura: Las operaciones de lectura devuelven los datos más recientes de la instancia que se han escrito en la mayoría de los miembros del set de réplicas.

  • 1 nivel de confirmación de escritura (write concern): The primary set de réplicas must acknowledge the write operation

$transactionOptions = [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY),
'readConcern' => new ReadConcern(ReadConcern::MAJORITY),
'writeConcern' => new WriteConcern(1),
];
$session->startTransaction($transactionOptions);

Este ejemplo muestra cómo configurar la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de una base de datos llamada test_database pasando un arreglo de opciones al método selectDatabase(). El código configura los siguientes ajustes:

  • PRIMARY_PREFERRED preferencia de lectura: Las operaciones de lectura recuperan datos desde el miembro principal del set de réplicas, o desde miembros secundarios si el principal no está disponible.

  • AVAILABLE nivel de consistencia de lectura: Las operaciones de lectura devuelven los datos más recientes de la instancia sin garantizar que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas

  • MAJORITY nivel de confirmación de escritura (write concern): La mayoría de todos los miembros del conjunto de réplicas deben reconocer la operación de escritura

$db = $client->selectDatabase('test_database', [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::AVAILABLE),
'writeConcern' => new WriteConcern(WriteConcern::MAJORITY),
]);

Este ejemplo muestra cómo configurar la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de una colección llamada test_collection pasando un arreglo de opciones al método selectCollection(). El código configura la siguiente configuración:

  • SECONDARY_PREFERRED preferencia de lectura: Las operaciones de lectura recuperan datos de los miembros secundarios del conjunto de réplicas o de los miembros primarios si no hay secundarios disponibles

  • AVAILABLE nivel de consistencia de lectura: Las operaciones de lectura devuelven los datos más recientes de la instancia sin garantizar que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas

  • 0 nivel de confirmación de escritura (write concern): no se solicita confirmación de la operación de escritura

$collection = $client->selectCollection('test_database', 'test_collection', [
'readPreference' => new ReadPreference(ReadPreference::SECONDARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::AVAILABLE),
'writeConcern' => new WriteConcern(0),
]);

Esta sección muestra cómo personalizar aún más la configuración de tu operación de lectura de las siguientes maneras:

El MongoDB Server le permite aplicar etiquetas clave-valor a los miembros del set de réplicas según cualquier criterio que elija. Luego, puedes utilizar esas etiquetas para dirigirte a uno o más miembros para una operación de lectura.

Por defecto, la Librería PHP de MongoDB ignora las etiquetas al elegir un nodo del cual leer. Para indicar a la librería PHP de MongoDB que prefiera ciertas etiquetas, pásalas como un parámetro al constructor de tu clase MongoDB\Driver\ReadPreference. Luego, configura el objeto MongoDB\Driver\ReadPreference como valor de la opción de base de datos readPreference.

Supón que estás conectado a un set de réplicas que contiene nodos alojados en varios centros de datos en todo Estados Unidos. Este ejemplo de código establece la opción readPreference en un conjunto de etiquetas que instruyen a test_database a preferir las lecturas de los miembros secundarios del set de réplicas en el siguiente orden:

  1. Nodos del centro de datos de Nueva York (['dc' => 'ny'])

  2. Nodos del centro de datos de San Francisco (['dc' => 'sf'])

  3. Cualquier miembro secundario ([])

$readPreference = new ReadPreference(
ReadPreference::RP_SECONDARY,
[
['dc' => 'ny'],
['dc' => 'sf'],
[],
],
);
$db = $client->selectDatabase(
'test_database',
['readPreference' => $readPreference],
);

Al conectar a un clúster o a un set de réplicas, la librería PHP utiliza balanceo de carga para gestionar las solicitudes de lectura y escritura. El balanceo de carga permite que la librería distribuya estas solicitudes en múltiples servidores para evitar sobrecargar un único servidor y asegurar un rendimiento óptimo.

Al conectarse a un clúster particionado, la librería PHP determina la instancia mongos más cercana calculando cuál tiene el menor tiempo de ida y vuelta en la red. A continuación, la librería determina la ventana de latencia sumando el tiempo medio de viaje de ida y vuelta de este mongos al valor localThresholdMS. La librería equilibra la carga de las solicitudes a través de hasta dos instancias aleatorias de mongos que se encuentren dentro de la ventana de latencia. Para cada solicitud, la librería elige el servidor con menor carga de operación determinando su valor operationCount.

Al conectarse a un set de réplicas, la librería PHP primero selecciona los miembros del set de réplicas de acuerdo con su preferencia de lectura. Luego, la librería sigue el mismo proceso descrito en el párrafo anterior. Después de calcular la ventana de latencia, la librería selecciona hasta dos nodos aleatorios del set de réplicas que entren en la ventana y elige al nodo con el valor operationCount más bajo para recibir la solicitud.

Tip

Para obtener más información sobre el balanceo de carga, consulte Balanceador de clúster en el manual de MongoDB Server.

Para aprender cómo personalizar el comportamiento de selección de servidores de la librería, consulta Opciones de Selección y Descubrimiento de Servidor en la guía Especificar Opciones de Conexión.

La librería PHP emplea el valor de umbral local para calcular la ventana de latencia para la selección del servidor. Este valor determina los servidores que son elegibles para recibir solicitudes de lectura y guardado.

Por defecto, la librería utiliza solo mongos instancias o miembros de set de réplicas cuyos tiempos de ping estén dentro de 15 milisegundos del servidor más cercano. Para distribuir las lecturas entre servidores con latencias más altas, pasa un arreglo de opciones al constructor MongoDB\Client que establezca la opción localThresholdMS.

El siguiente ejemplo especifica un umbral local de 35 milisegundos:

$options = [
'replicaSet' => 'repl0',
'readPreference' => new ReadPreference(ReadPreference::RP_SECONDARY_PREFERRED),
'localThresholdMS' => 35,
];
$client = new Client('mongodb://localhost:27017', [], $options);

En el ejemplo anterior, la librería PHP de MongoDB distribuye las lecturas entre los nodos coincidentes dentro de 35 milisegundos del tiempo de ping del nodo más cercano.

Nota

La librería PHP de MongoDB ignora el valor de localThresholdMS al comunicarse con un set de réplicas a través de una instancia de mongos. En este caso, utiliza la opción de línea de comando localThreshold.

Para obtener más información sobre cualquiera de los métodos o tipos tratados en esta guía, consulta la siguiente documentación de la API de la librería:

Para obtener más información sobre el método startTransaction(), consulte MongoDB\Driver\Session::startTransaction() en la documentación de la API de la extensión.

Volver

Transacciones

En esta página