lunes, 30 de septiembre de 2013

Como instalar Apache Cassandra

Anteriormente os hemos hablado de las diferentes de bases de datos NoSQL más usadas actualmente, cada una aporta una serie de características distintas, Apache Cassandra es una de ellas, esta escrita en JAVA, posee una arquitectura distribuida basada en una serie de nodos iguales que se comunican con un protocolo P2P con lo que la redundancia es máxima. Cassandra usa su propio lenguaje conocido como CQL para realizar consultas, muy similar a SQL. Despues de esta breve introdución, os vamos a explicar como instalarla y como acceder a ella.

Lo primero de todo es tener en cuenta la versión de Java que tenemos instalada, ya que es necesario tener la versión 7 para instalar Cassandra 2.0. Para comprobar que versión tenemos instalada vamos a abrir una consola y vamos a ejecutar el siguiente comando:
java -version
Si disponemos de varias versiones de Java podeis usar el siguiente comando para elegir cual deseamos usar:
sudo update-alternatives --config javac
Una vez verificado que disponemos de la versión de Java necesaria vamos a explicar como realizar la instalación en sistemas basados en Debian y en Red Hat, actualmente la última versión estable es la 2.0.

jueves, 26 de septiembre de 2013

Como administrar MongoDB desde Genghis

En su día ya os hablamos de RockMongo para administrar MongoDB desde una interfaz web. Genghis al igual que RockMongo nos ofrece esa posibilidad. Es un GUI bastante sencillo de usar el cual ha sido liberado tanto en Ruby como en PHP. Puede ser instalado a través de una gema de Ruby o ejecutado directamente desde nuestro servidor web con PHP.

Hoy os vamos a explicar como realizar la instalación a través de Ruby. Los requisitos para la instalación es tener Ruby y rubygems.
#Distribución basada en Debian
sudo apt-get install rubygems

#Distribución basada en Red Hat
sudo yum install rubygems
Una vez que ya tenemos instalado las rubygems, vamos a proceder con la instalación de genghisapp.
sudo gem install genghisapp
Realizando dicha instalación obtuvimos el siguiente error:
Error:

Building native extensions.  This could take a while...
ERROR:  Error installing genghisapp:
 ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb
extconf.rb:1:in `require': no such file to load -- mkmf (LoadError)
 from extconf.rb:1


Gem files will remain installed in /var/lib/gems/1.8/gems/json-1.8.0 for inspection.
Results logged to /var/lib/gems/1.8/gems/json-1.8.0/ext/json/ext/generator/gem_make.out

lunes, 23 de septiembre de 2013

Como liberar espacio en disco al eliminar una colección en MongoDB

En MongoDB, al igual que ocurre con otros gestores de base de datos, trabajan con ficheros de datos. Comúnmente cuando eliminamos documentos o colecciones, el espacio ocupado por este fichero sigue siendo el mismo, esto es debido a que puede ser usado en el futuro. Hoy vamos a ver como liberar dicho espacio.

Lo primero de todo sera levantar mongo como un servicio indicando la ruta en la que se crear la base de datos, el puerto por el que escuchara y el fichero de log.
mongod --dbpath /data/ --port 27017 --logpath /data/log/hispabigdata.log &
Ahora abrimos una consola de mongo y vamos a crear una base de datos y una colección con 100.000 de documentos, recordad que el siguiente proceso puede tardar bastante, dependiendo del ordenador en el que lo ejecuteis.
use LiberandoDB;

for (var i=0; i < 100000; i++){
   db.ejemploEliminacion.insert ({
        "_id":i, "nombre":"HispaBigdata"+i, "fecha": ISODate()
   });
}
Se ejecutamos el siguiente comando podemos ver la ocupación de las bases de datos que tenemos en mongo.
show dbs;

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