Estudiante de Ingeniera en Sistemas y Computacin Universidad de Caldas CUL ES EL CONTENIDO? Qu es una base de datos NoSQL? Descripcin general de MongoDB Configuracin e instalacin de MongoDB + PHP en Linux Manipulacin de MongoDB desde PHP
QU ES UNA BASE DE DATOS NOSQL? Las bases de datos NoSQL son sistemas de almacenamiento de informacin que no cumplen con el esquema entidad-relacin.
Mientras que las bases de datos relacionales basan su funcionamiento en tablas, joins y transacciones ACID, las bases de datos NoSQL no imponen una estructura de datos en forma de tablas y relaciones entre ellas, ya que suelen permitir almacenar informacin en otros formatos como clave-valor, Mapeo de Columnas, Documentos o Grafos.
La principal caracterstica de las bases de datos NoSQL es que estn pensadas para manipular enormes cantidades de informacin de manera muy rpida. Estn preparadas para escalar horizontalmente sin perder rendimiento. CLASIFICACIN DE LAS BD NOSQL Se clasifican segn su fuente de datos:
Clave-valor: Redis Mapeo de Columnas:Hbase Documentos: MongoDB Grafos: Neo4j DESCRIPCIN GENERAL DE MONGODB MongoDB es una solucin escalable y de alto rendimiento, es una base de datos de cdigo abierto, escrita en C++. Sus caractersticas principales son: Orientada a documentos(almacenamiento BSON). arrays y documentos anidados ndices para realizar consultas mas rpidas
QU ES MONGODB? Orientada a documentos QU ES MONGODB? Las colecciones son bsicamente bolsas de documentos, o bolsas de objetos JSON
Diferentes campos Diferentes tamaos Indexables
INSTALACIN MONGODB Descargar la versin desde http://www.mongodb.org/downloads
En Linux: # creamos un directorio por defecto para los datos $ sudo mkdir -p /data/db
# usamos curl, para obtener la ultima versin: $ curl -O http://downloads.mongodb.org/linux/mongodb-linux-i686- latest.tgz
# desempaquetamos en el directorio deseado y listo. $ tar xzf mongodb-linux-i686-latest.tgz INSTALACIN MONGODB Instalar PHP Driver: $ sudo apt-get install php5-dev php5-cli php-pear $ sudo pecl install mongo
Abrir el archivo php.ini y adicionar: extension=mongo.so ESTABLECIENDO UNA CONEXIN <?php //conecta a localhost:27017 $connection = new Mongo();
//conecta a un host remoto (puerto por omisin: 27017) $connection = new Mongo( "example.com" );
// conecta a un host remoto en el puerto facilitado $connection = new Mongo( example.com:65432" ); ?>
Conexin persistente
<?php $connection = new Mongo("localhost:27017", array("persist" => "x")); ?> CMO GUARDAMOS UN DOCUMENTO? <?php try{ $mongo= new Mongo("localhost:27017", array("persist" => "x")); $db = $mongo->comedy; $collection = $db->cartoons;
$obj = array( " title " => "Calvin and Hobbes", "author" => "Bill Watterson" ); $collection->insert($obj);
$cursor = $collection->find(); foreach ($cursor as $obj) { echo $obj["title"] . "\n"; } } catch (MongoCursorException $e) { die("Query failed " . $e -> getMessage()); } AL GUARDAR: Cuando insertamos los documentos, sucede lo siguiente: La BD comedy es creada La coleccin cartoons es creada Se crea un ndice en el campo _id Se crean y se adiciona un _id para cada documento DOCUMENTOS MS COMPLEJOS Representacin en JSON
{ '_id:'aristi', 'name:'Sebastian Aristizabal, 'friends': ['Pablo', 'Yeny'], 'followers:18, 'contact:{'twitter'=>'@arystyzabal', 'email'=>'sebaris@gmail.com'} } DOCUMENTOS MS COMPLEJOS Representacin en php
//Consulta en array $query=array( 'friends' => 'Pablo' ); $result=$collection->findOne($query);
//Consulta en documento anidado $query=array( 'contact.twitter' => '@arystyzabal' ); $result=$collection->findOne($query);
ESPECIFICANDO CAMPOS Las consultas se pueden llevar a cabo especificando que campos quiero retornar.
$query = array( '_id' => 'aristi' ); $fields = array( '_id => 0, 'name => 1, 'friends => 1 ); $result = $collection -> findOne ( $query, $fields ); ALGUNAS CONSULTAS AVANZADAS mayor que ($gt), menor que ($lt), mayor o igual que ($gte), menor o igual que ($lte)
Tambin soporta $exists. $mod, $type, $size RESULTADOS DE LAS CONSULTAS El resultado de un find() es un cursor Los cursores se pueden manejar con foreach
$results = $collection->find(); foreach ($results as $r) { print_r($r); } RESULTADOS DE LAS CONSULTAS Los cursores se pueden trabajar con un ciclo while
Solo se puede llevar a cabo una operacin por campo, es decir no se puede hacer $pop & $pull a una array en un mismo comando ACTUALIZACIONES MULTIPLES Por defecto solo el primer documento es actualizado, pero se puede cambiar solo agregando una opcin