1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-28 01:12:20 +01:00
Files
archived-doc-es/reference/mongo/readpreferences.xml
Pedro Antonio Gil Rodríguez 7560bad742 Cambio de 'en base a' por una fórmula correcta
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337393 c90b9560-bf6c-de11-be94-00142212c4b1
2015-08-10 15:47:48 +00:00

315 lines
13 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: b84e55620e97b453cc50143db08a37894f7050e9 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="mongo.readpreferences" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Preferencias de lectura</title>
<para>
MongoDB 2.2 y la versión 1.3.0 del controlador añaden el soporte para
<link xlink:href="&url.mongodb.docs.readpreferences;">preferencias de lectura</link>,
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 función 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. <classname>MongoCollection</classname>
heredará las preferencias de lectura definidas en la instancia de
<classname>MongoDB</classname> conrrespondiente).
</para>
<para>
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
<link xlink:href="&url.mongodb.docs.tagsets;">conjuntos de etiquetas</link> 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.
</para>
<simplesect xml:id="mongo.readpreferences.modes">
<title>Modos de preferencias de lectura</title>
<warning>
<para>
Todos los modos de preferencias de lectura excepto <literal>MongoClient::RP_PRIMARY</literal>
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 <literal>MongoClient::RP_PRIMARY</literal>.
</para>
</warning>
<itemizedlist>
<listitem>
<para>
<literal>MongoClient::RP_PRIMARY</literal>
</para>
<para>
Todas las opearciones de lectura utilizarn únicamente el primario del conjunto de réplica actual. Esto es lo
predeterminado. Si el primario no está disponible, las operaciones de lectura producirán una
excepción.
</para>
<para>
Este modo es incompatible con el uso de conjuntos de etiquetas. Especificar un conjunto de etiquetas con
<literal>MongoClient::RP_PRIMARY</literal> resultará en una excepción.
</para>
</listitem>
<listitem>
<para>
<literal>MongoClient::RP_PRIMARY_PREFERRED</literal>
</para>
<para>
En muchas situaciones, las operaciones leen desde el miembro primario del conjunto.
Sin embargo, si el primario no está disponible, como durante situaciones de tolerancia
a fallos, las operacoines leen desde miembros secundarios.
</para>
<para>
Cuando la preferencias de lectura incluye un conjunto de etiquetas, el cliente lee primero desde
el primario, si está disponible, y luego desde los secundarios que coinciden con las
etiquetas especificadas. Si ningún segundario coincide con alguna etiqueta, la operación de lectura
producirá una excepción.
</para>
<warning>
<para>
La versión 2.2 de mongos añade soporte completo para preferencias de lectura. Al
conectar a instancias más antiguas de mongos,
<literal>MongoClient::RP_PRIMARY_PREFERRED</literal> enviará las consultas a
los secundarios.
</para>
</warning>
</listitem>
<listitem>
<para>
<literal>MongoClient::RP_SECONDARY</literal>
</para>
<para>
Operations read only from the secondary members of the set. If no
secondaries are available, read operations will produce an exception.
</para>
<para>
La mayoría de los conjuntos tienen al menos un secundario, pero hay situaciones donde
podría no haber ningún secundario disponible. Por ejemplo, un conjunto con un primario, un
secundario, y un árbitro podría no tener ningún secundario si un miembro está en
estado de recuperación o indisponible.
</para>
<para>
Cuando la preferencia de lectura incluye un conjunto de etiquetas, el cliente intenta encontrar
miembros secundarios que coincidan con el conjunto de etiquetas especificado y dirigir las lecturas
a un secundario aleatorio de entre el grupo más cercano. Si ningún secundario ha coincidido
con las etiquetas, la operación de lectura producirá una excepción.
</para>
</listitem>
<listitem>
<para>
<literal>MongoClient::RP_SECONDARY_PREFERRED</literal>
</para>
<para>
En muchas situaciones, las operaciones leen desde miembros secundarios, pero en
situaciones donde el conjunto consiste el un único primario sin ningún otro
miembro, la operación de lectura usará el primario del conjunto.
</para>
<para>
Cuando la preferencia de lectura incluye un conjunto de etiquetas, el cliente intenta encontrar
un miembro secundario que coincida con el conjunto de etiquetas especificado y dirigir las lecturas
a un secundario aleatorio de entre el grupo más cercano. Si ningún secundario ha coincidido
con las etiquetas, la operación de lectura producirá una excepción.
</para>
</listitem>
<listitem>
<para>
<literal>MongoClient::RP_NEAREST</literal>
</para>
<para>
El controlador lee desde un miembro <emphasis>aleatorio</emphasis> del conjunto
que posea un timepo de ping que sea menos de 15ms más lento que el miembro con
el tiempo de ping más lento. Las lecturas en el modo
<literal>MongoClient::RP_NEAREST</literal> no consideran el
tipo de miembro y podría leerse tanto desde primarios como de secundarios.
</para>
<para>
Establezca este modo para minimizar el efecto de latencia de red en operaciones de lectura
sin tener preferencia para datos actuales o antiguos.
</para>
<para>
Si se especifica un conjunto de etiquetas, el cliente intenta encontrar un miembro
que coincida con el conjunto de etiquetas especificado y dirigir las lecturas a un nodo
aleatorio de entre el grupo más cercano.
</para>
<note>
<para>
Todas las operaciones leen desde el miembro más cercano del conjunto de réplica que
coincida con el modo de preferencia de lectura especificado. El modo
<literal>MongoClient::RP_NEAREST</literal> prefiere lecturas de baja latencia
sobre un estado de miembro primario o secundario.
</para>
</note>
</listitem>
</itemizedlist>
</simplesect>
<simplesect xml:id="mongo.readpreferences.tagsets">
<title>Conjuntos de etiquetas</title>
<para>
Los <link xlink:href="&url.mongodb.docs.tagsets;">conjuntos de etiquetas</link> 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.
</para>
<para>
Se pueden especificar conjuntos de etiquetas con los siguientes modos de preferencia de lectura:
</para>
<itemizedlist>
<listitem>
<para>
<literal>MongoClient::RP_PRIMARY_PREFERRED</literal>
</para>
</listitem>
<listitem>
<para>
<literal>MongoClient::RP_SECONDARY</literal>
</para>
</listitem>
<listitem>
<para>
<literal>MongoClient::RP_SECONDARY_PREFERRED</literal>
</para>
</listitem>
<listitem>
<para>
<literal>MongoClient::RP_NEAREST</literal>
</para>
</listitem>
</itemizedlist>
<para>
No se pueden especificar conjuntos de etiquetas con el modo de
preferencia de lectura <literal>MongoClient::RP_PRIMARY</literal>. Las etiquetas se aplican
solamente al seleccionar un miembro secundario de un conjunto, excepto para el cuándo en el
modo más cercano.
</para>
</simplesect>
<simplesect xml:id="mongo.readpreference.usage">
<title>Especificar preferencias de lectura</title>
<para>
Las preferencias de lectura se pueden especificar en una URI proporcionada a
<function>MongoClient::__construct</function>, 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.
</para>
<para>
Cuando se especifican los modos de preferencia de lectura en una cadena de consulta, los conjuntos de etiquetas
para el valor <literal>readPreferenceTags</literal> deberían ser una secuencia delimitada por
comas de pares clave/valor delimitados por dos puntos.
</para>
<note>
<para>
Cada conjunto de etiquetas definida en la cadena de consulta utilizará el
nombre <literal>readPreferenceTags</literal>. A diferencia de cómo PHP pudiera tratar cadenas
de consulta de URL, los valores sucesivos para <literal>readPreferenceTags</literal>
no se sobrescribirán. El controlador recopilará conjuntos de etiquetas en el orden
en que aparecen en la cadena de consulta.
</para>
</note>
<warning>
<para>
¡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
<literal>readPreferenceTags</literal> vacío para recurrir a "no tag set
preference".
</para>
</warning>
<para>
<example>
<title>Preferencias de lectura de URI de coneción con sintaxis de cadena de consulta</title>
<programlisting role="php">
<![CDATA[
<?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'));
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Establecer las preferencias de lectura con sintaxis de array para conjuntos de etiquetas</title>
<programlisting role="php">
<![CDATA[
<?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(),
));
?>
]]>
</programlisting>
</example>
</para>
</simplesect>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->