downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Writes> <Tutorial
Last updated: Fri, 20 May 2011

view this page in

Conexión

La Conexión a MongoDB es tan fácil como usar new Mongo, pero hay muchas más opciones y configuraciones adicionales. La página Mongo::__construct() cubre todas las opciones del API, pero está página ofrece más detalles y consejos para casos de uso prácticos.

Acceso a la conexión

Si MongoDB se inicia con la opción --auth , las conexiones deben ser autenticadas antes de ser usadas. Se puede hacer a nivel de cada base de datos con MongoDB::authenticate():

<?php

$m 
= new Mongo();
$db $m->admin;

$db->authenticate($username$password);

?>

Hay una gran desventaja al usar este método: si la conexión a la base de datos se cae y luego se reconecta, la conexión ya no estará autentificada.

Si se utiliza la forma de conexión mediante cadena, como se describe en Mongo::__construct(), la base de datos se autentificará al conectarse y se autentificará de nuevo si la conexión se cae y se restablece.

Hace lo mismo que el código anterior, a excepción que las reconexiones a la base de datos serán automáticamente autentificadas:

<?php

$m 
= new Mongo("mongodb://${username}:${password}@localhost");

?>

Por omisión, el controlador autentificará al usuario en la base de datos. Para autentificarse con diferentes base de datos, se especifica el nombre de la base de datos después del host. Este ejemplo iniciará la sesión al usuario en la base de datos "blog":

<?php

$m 
= new Mongo("mongodb://${username}:${password}@localhost/blog");

?>

Grupos replica

Para conectarse a un grupo réplica, se debe especificar uno o más miembros del grupo usando la opción replicaSet.

<?php

$m 
= new Mongo("mongodb://localhost:27017", array("replicaSet" => true));

?>

Se require la versión 1.0.9+ del driver para conectar a un grupo réplica (versiones anteriores del driver no auto-detectarán el master o no se reconectarán correctamente).

El driver de PHP hará una petición a los servidor(es) de base de datos listados para descubrir cual es el master. Mientras se pueda conectar almenos a uno de los servidores listados y pueda encontrar el master, la conexión se establecerá con éxito. Si no se puede realizar una conexión a ninguno de los servidores listados o no puede encontrar el master, MongoConnectionException devolverá una excepción.

Si el master no se encuentra disponible, los slaves no promocionarán un nuevo master por algunos segundos. Durante ese tiempo, el controlador no podrá realizar ninguna operación en la base de datos (excepto las conexiones a los slaves que seguirán disponibles para operaciones de lectura) Por lo tanto, si se intenta hacer cualquier tipo de consulta de lectura o escritura mientras esto suceda, se devolverá una excepción.

Una vez el master es elegido, al realizar una lectura o escritura el driver detectará cual es el nuevo master. Establecerá la conexión como como primaria y continuará operando normalmente.

Para obtener más información acerca de grupos replica, consulte la » documentación del núcleo.

Connexiones persistentes

Crear una nueva conexión cada vez a la base de datos es muy lento. Para minimizar el número de conexiones que se necesite, se pueden usar las conexiones persistentes. Una conexión persistente es guardada por PHP, para que pueda usarse la misma conexión en múltiples peticiones.

Por ejemplo, este simple programa para conectarse 1000 veces a la base de datos:

<?php

for ($i=0$i<1000$i++) {
  
$m = new Mongo();
}

?>

Esto tarda apróximadamente 18 segundos en ejecutarse. Pero si lo cambiamos para que utilice una conexión persistente:

<?php

for ($i=0$i<1000$i++) {
  
$m = new Mongo("localhost:27017", array("persist" => "x"));
}

?>

...tardará menos de 0.02 segundos en ejecutarse, ya que solo se realiza una sola conexión a la base de datos.

Las conexiones persistentes necesitan indicarse usando la variable de identificación (tal y como se muestra "x" en el ejemplo anterior). Para que la conexión persistente pueda usarse, el hostname, puerto, variable persist y el usuario y contraseña (si es necesario) debe coincidir con una conexión persistente ya existente. De lo contrario, se creará una nueva conexión los datos proporcionados.

Las conexiones persistentes son altamente recomendables y se deberían usar siempre en producción a no ser que exista una razón con fundamento para hacer lo contrario. La mayoría de razones por las cuales no son recomendadas para bases de datos relacionales son totalmente irrelevantes para MongoDB.

Las conexiones persistentes serán el tipo de conexión por omisión en 1.0.12. Para crear conexiones no persistentes, se deberá pasar "persist" => false a Mongo::__construct().

Soporte de Domain Socket

Si se está ejecutando MongoDB en local con la versión 1.0.9 o superior del driver, se puede conectar a la base de datos vía fichero. MongoDB automáticamente abre un fichero socket al iniciarse: /tmp/mongodb-<port>.sock.

Para conectarse al fichero socket, especifique la ruta de la conexión MongoDB:

<?php

$m 
= new Mongo("mongodb:///tmp/mongo-27017.sock");

?>

Si se quiere utilizar autenticación en la conexión (tal y como se indica más arriba) usando un fichero socket, se debe especificar el puerto 0 para que el analizador de la cadena de conexión sepa donde acaba la cadena de conexión.

<?php

$m 
= new Mongo("mongodb://username:password@/tmp/mongo-27017.sock:0/foo");

?>


add a note add a note User Contributed Notes Conexión
Bowser 10-Dec-2010 10:33
It is very important to suggest those ones using the form
$m = new Mongo("mongodb://${username}:${password}@host");
to put it into a try{} construct for security reasons.
In fact in case of mongoDB isn't accessible for any reason if PHP.ini's options is setted for displaying errors (the default setting), it will show up with the exception's error (MongoConnectionException) even the couple username/password of the database and this is really not a good thing.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites