Docs Menu
Docs Home
/ /

Configurar las operaciones CRUD

En esta guía, puede aprender cómo configurar las opciones de preocupación de escritura, preocupación de lectura y preferencia de lectura para modificar la forma en que la biblioteca PHP de MongoDB ejecuta operaciones de creación, lectura, actualización y eliminación (CRUD) en conjuntos de réplicas.

Puede establecer opciones de preocupación de escritura, preocupación de lectura y preferencia de lectura en los siguientes niveles:

  • Cliente, que establece el valor predeterminado 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, la preocupación de lectura y la preocupación de escritura en varios niveles pasando un parámetro de matriz de opciones a cualquiera de los siguientes métodos:

Este ejemplo muestra cómo establecer la preferencia de lectura, la preocupación de lectura y la preocupación de escritura de un MongoDB\Client instancia pasando una matriz al constructor. El código configura los siguientes ajustes:

  • 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 Preocupación de escritura: el miembro principal y uno secundario del conjunto de réplicas deben 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 cadena. Al configurar los ajustes de lectura y escritura en cualquier otro nivel, debe 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 Preocupación de escritura: la mayoría de 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 configurar la preferencia de lectura, la preocupación de lectura y la preocupación de escritura de una transacción pasando una matriz al método startTransaction(). El código configura los siguientes ajustes:

  • PRIMARY Preferencia de lectura: las operaciones de lectura recuperan datos del miembro del conjunto de réplicas principal

  • MAJORITY Preocupación 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 conjunto de réplicas

  • 1 Preocupación de escritura: el miembro principal del conjunto de réplicas debe reconocer la operación de escritura

$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 getDatabase(). 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 Preocupación de escritura: la mayoría de los miembros del conjunto de réplicas deben reconocer la operación de escritura

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

Este ejemplo muestra cómo establecer la preferencia de lectura, la preocupación de lectura y la preocupación de escritura de una colección llamada test_collection pasando una matriz de opciones al método getCollection(). El código configura los siguientes ajustes:

  • SECONDARY_PREFERRED Preferencia de lectura: Las operaciones de lectura recuperan datos de los miembros del conjunto de réplicas secundarias 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->getCollection('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 la operación de lectura de las siguientes maneras:

El servidor MongoDB permite aplicar etiquetas clave-valor a los miembros del conjunto de réplicas según los criterios que se elijan. Posteriormente, se pueden usar esas etiquetas para seleccionar uno o más miembros para una operación de lectura.

De forma predeterminada, la biblioteca PHP de MongoDB ignora las etiquetas al elegir un miembro para leer. Para indicarle que prefiera ciertas etiquetas, páselas como parámetro al constructor de la clase MongoDB\Driver\ReadPreference. A continuación, establezca el objeto MongoDB\Driver\ReadPreference como valor de la opción de base de datos readPreference.

Supongamos que está conectado a un conjunto de réplicas que contiene miembros alojados en varios centros de datos de Estados Unidos. Este ejemplo de código establece la opción readPreference en un conjunto de etiquetas que indica a test_database que prefiera las lecturas de los miembros del conjunto de réplicas secundario 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->getDatabase(
'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 conjunto de réplicas, la biblioteca PHP primero selecciona los miembros del conjunto según sus preferencias de lectura. A continuación, sigue el mismo proceso descrito en el párrafo anterior. Tras calcular la ventana de latencia, selecciona hasta dos miembros aleatorios del conjunto de réplicas que se encuentren dentro de la ventana y elige el miembro con el valor operationCount más bajo para recibir la solicitud.

Tip

Para obtener más información sobre el equilibrio de carga, consulte Sharded Cluster Balancer en el manual de MongoDB Server.

Para aprender a personalizar el comportamiento de selección del servidor de la biblioteca, consulte Opciones de selección y descubrimiento de servidor en la guía Especificar opciones de conexión.

La biblioteca PHP utiliza el valor de umbral local para calcular la ventana de latencia para la selección del servidor. Este valor determina los servidores que pueden recibir solicitudes de lectura y escritura.

De forma predeterminada, la biblioteca solo utiliza instancias mongos o miembros del conjunto de réplicas cuyos tiempos de ping están a menos de 15 milisegundos del servidor más cercano. Para distribuir las lecturas entre servidores con latencias más altas, pase una matriz de opciones al constructor MongoDB\Client que establece 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 biblioteca PHP MongoDB distribuye lecturas entre los miembros coincidentes dentro de 35 milisegundos del tiempo de ping del miembro más cercano.

Nota

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

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

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

Volver

Transacciones

En esta página