Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 le permiten personalizar la consistencia causal y la disponibilidad de los datos en sus conjuntos de réplicas. Para ver una lista completa de las opciones de preferencia de lectura, preocupación de lectura y preocupación de escritura, consulte las siguientes guías en el manual de MongoDB Server:

  • preferencia de lectura

  • readConcern

  • Nivel de confirmación de escritura

Puede controlar cómo la biblioteca enruta las operaciones de lectura configurando una preferencia de lectura. También puede controlar cómo la biblioteca espera la confirmación de las operaciones de lectura y escritura en un conjunto de réplicas configurando preocupaciones de lectura y escritura.

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 los miembros del conjunto de réplicas secundarias

  • local Preocupación 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 configurar la preferencia de lectura, la preocupación de lectura y la preocupación de escritura de una sesión pasando una matriz 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 Preocupación 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, la preocupación de lectura y la preocupación de escritura de una base de datos llamada test_database pasando una matriz 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 Preocupación 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 Preocupación 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. Miembros del centro de datos de Nueva York (['dc' => 'ny'])

  2. Miembros 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 conectarse a un clúster fragmentado o a un conjunto de réplicas, la biblioteca PHP utiliza el balanceo de carga para gestionar las solicitudes de lectura y escritura. El balanceo de carga permite a la biblioteca distribuir estas solicitudes entre varios servidores para evitar la sobrecarga de ninguno y garantizar un rendimiento óptimo.

Al conectarse a un clúster fragmentado, la biblioteca PHP determina la instancia más cercana mongos calculando cuál tiene el menor tiempo de ida y vuelta en la red. Luego, la biblioteca determina la ventana de latencia sumando el mongos tiempo de ida y vuelta promedio de esta instancia al valor de localThresholdMS. La biblioteca distribuye las solicitudes entre hasta dos instancias aleatorias mongos dentro de la ventana de latencia. Para cada solicitud, la biblioteca elige el servidor con la menor operationCount carga operativa determinando su valor.

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