viernes, 20 de septiembre de 2013

JSON en MariaDB con Dynamic Columns

Hoy vamos hablar de como añadir una funcionalidad NoSQL a la bbdd relacional MariaDB, fork de MySQL.
Esta nueva funcionalidad se llama "dynamic columns" y fue soportada en su primera versión dentro de MariaDB 5.3 

Con dynamic columns se puede almacenar un conjunto "de diferente columnas" en una columna de tipo BLOB.
También te permite solicitar toda la información en formato JSON, a través de la función COLUMN_JSON.

Mariadb se puede instalar de source o desde paquetería (rpm,deb), en mi caso tengo una centos 6.4 y voy a instalar la versión mas avanzada de MariaDB hasta el momento (maridb10.0.4 en versión alpha).

Se pueden bajar e instalar todos estos paquetes (rpm) del siguiente enlace:

  • MariaDB-10.0.4-centos6-x86_64-client.rpm
  • MariaDB-10.0.4-centos6-x86_64-common.rpm
  • MariaDB-10.0.4-centos6-x86_64-compat.rpm
  • MariaDB-10.0.4-centos6-x86_64-server.rpm

jueves, 19 de septiembre de 2013

Como actualizar un documento en MongoDB desde Node.js

En el articulo anterior vimos como consultar documentos de MongoDB en Node.js, hoy os vamos a explicar como buscar un documento en concreto y actualizarlo.

Vamos a usar la colección de ventas del ejemplo anterior, ventas.json y el mismo proyecto. El objetivo va a ser añadir un nuevo articulo vendido por "Julia Romero". Por lo que vamos a editar el fichero app.js y añadir el siguiente código:
var MongoClient = require('mongodb').MongoClient;

//Conexion con MongoDB -> servidor:puerto/nombreBasedeDatos
MongoClient.connect('mongodb://localhost:27017/supermercado', function(err,db){
    if(err) throw err;
    //Vamos a buscar a la vendedora Julia Romero
    var query = {"vendedor" : "Julia Romero"}
    //Vamos a añadir un nuevo artículo vendido, 
    //Para ello usamos la funcion push para insertar un un item al array artículos.  
    var nuevo_elemento = {$push : {"articulos" : {articulo: "cuaderno hispabigdata", "pvp" : 25 }}};
    //Creamos la variable coleccion
    var coleccion = db.collection('ventas');
    //Actualizamos el documento
    coleccion.update(query, nuevo_elemento, function(err, doc){
        if(err) throw err;
        //Mostramos mensaje indicando que el documento con ID X se ha actualizado
        console.dir("Coleccion con ID: " + doc + " actualizada correctamente");
        //Cerramos la conexión a la base de datos.
        return db.close();
    });
});

martes, 17 de septiembre de 2013

Como acceder a MongoDB desde Node.js

Hoy os vamos a explicar como consultar documentos de una colección en MongoDB desde Node.js, para ellos usaremos la colección ventas que hemos utilizado de ejemplo en artículos anteriores.

Importamos el fichero ventas.json con la opción --drop por si ya lo tuviesemos importado del ejemplo anterior. El objetivo sera obtener el listado de vendedores que han vendido una fregona.
mongoimport -d supermercado -c ventas --drop < ventas.json
Lo primero de todo sera la creación de nuestro espacio de trabajo e instalar el driver nativo de mongodb para node.js
mkdir hispabigdata
cd hispabigdata
npm install mongodb
Una vez tenemos preparado el entorno de trabajo, vamos a crear nuestra aplicación app.js y añadimos el siguiente código:

martes, 10 de septiembre de 2013

Como monitorizar consultas lentas en MongoDB

Después de haber trabajado con indices en semanas anteriores, hoy os vamos a explicar como detectar cuellos de botella en nuestras aplicaciones causados por consultas lentas. Uno de los grandes problemas que tenemos a la hora de programar aplicaciones es como optimizar nuestras consultas. Mongo, de forma automática, monitoriza todas las consultas que tienen una duración mayor a 100 milisegundos y las guarda en un fichero de log, esto nos puede ayudar bastante para optimizar nuestras aplicaciones. Para poder consultar dichas queries tenemos que lanzar Mongo como demonio y especificar en que fichero se guardaran.

Para ello vamos a levantar el demonio de Mongo con mongod en segundo plano añadiendo al final &, especificando con --dbpath donde vamos a almacenar nuestras bases de datos, con --port le indicamos que levante la instancia por el puerto especificado y con --logpath le indicamos en que fichero queremos nos guarden los log.
mongod --dbpath /home/hispabigdata/data/ --port 27017 --logpath /home/hispabigdata/data/log/hispabigdata.log &

martes, 3 de septiembre de 2013

Como eliminar un elemento de array usando aggregation en MongoDB

No hace mucho os explicamos como eliminar un elemento de un array usando javascript, hoy vamos a complicarlo un poco mas y vamos a explicar paso a paso como eliminar el mayor o menor elemento de un array por cada documento en nuestra colección, usando aggregation en MongoDB. Viendo que aun cuesta adaptarse a las consultas en NoSQL, poco a poco vamos a ir haciendo ejemplos como realizar algunas de ellas para ir practicando.

Para realizar este ejercicios descarguense el fichero ventas.json de ejemplo e importenlo de la siguiente forma:
mongoimport -d supermercado -c ventas < ventas.json
Disponemos de una colección con la venta de artículos de cada empleado, en la que los documentos tienen el siguiente esquema:

Esquema de base de datos por HispaBigData