viernes, 27 de diciembre de 2013

MongoDB mejor Base de datos NoSQL del 2013

MongoDB ha sido elegida mejor base de datos NoSQL del 2013 en los Readers' Choice Awards, un premio concedido por los lectores de LinuxJournal con un 43.6% de los votos, muy por delante de Apache HBase, Cassandra o CouchDB. Desde HispaBigData queremos dar la enhorabuena al equipo de MongoDB.


También queremos agradecer a todos los lectores que han ayudado a crecer esta comunidad, volveremos en 2014 con mas articulo. 


¡FELICES FIESTAS!
El equipo de @HispaBigData



lunes, 16 de diciembre de 2013

Cómo ordenar documentos por la suma de varios campos en MongoDB

Hoy me he visto con la necesidad de realizar una consulta en MongoDB, la cual necesitaba ordenar por la suma de una serie de campos de un documento y os voy a explicar como la he realizado usando Aggregation.

El ejemplo consiste en una colección de documentos de cursos en el cual se recogen las calificaciones de asignaturas y debemos mostrar los documentos ordenados por la suma de todas las calificaciones por documento.

La estructura del documento es la siguiente:
{
    nombre    : "Daniel Romero",
    Curso : "Probando MongoDB por HispaBigdata",
    NotaAsignatura1  : 5.5,
    NotaAsignatura2  : 6.4,
    NotaAsignatura3  : 7.8
}
Aquí tenéis una serie de documentos con los que podéis hacer pruebas.

domingo, 1 de diciembre de 2013

Recursos para aprender CouchBase

CouchBase se esta poniendo las pilas y a través de una serie de webinars esta acercando su tecnología a todo el mundo. En este mes de diciembre hay programado algunos bastante interesantes, los cuales os recomendamos desde HispaBigData.

Estos son los Webinars programados para el mes de Diciembre:

  • CouchBase 101 - Instalación y configuración (02/12/2013) Nos explicaran como instalar CouchBase en diferentes plataformas como puede ser Windows, Mac o Amazon Cloud, también abordaran la configuración y la monitorización del sistema a través de la Consola de Administración.
  • Couchbase 102 - Operaciones SDK (05/12/2013) Si lo que desea es como manipular datos sobre los Buckets, este es tu webinar ya que explicaran como realizar conexiones, updates o inserts a través del SDK en diferentes plataformas.
  • Couchbase Mobile 101 (06/12/2013) CouchBase ha llegado a la teología móvil y en este webinar vamos a tener la oportunidad de ver como crear instancias en CouchbaseCloud.com para trabajar con plataformas móviles.
  • Couchbase 103 - Modelado de datos (09/12/2013) Aprenderemos los fundamentos de la creación de modelos de datos con Couchbase incluidas las estrategias de JSON, patrones claves comunes y el manejo y diferencias con respecto a los sistemas RDBMS.
  • Couchbase 104 - Vistas e Indices (12/12/2013) Si lo que deseamos es ver como funciona la estructura Map Reduce y el uso de indices para optimizar consultas este es tu webinar.
  • Couchbase 105 - Replicación en DataCenters y Elasticsearch (16/12/2013) Webinars bastante interesante en el que veremos como realizar replicaciones cruzadas de DataCenters(XDCR) y como integrar CouchBase con Elasticsearch.

Como veis un mes de diciembre bastante curioso para cerrar el año estudiando CouchBase y NoSQL.

miércoles, 20 de noviembre de 2013

Como acceder CouchBase desde Node.js

Node.js sigue creciendo y cada día que pasa es mas popular entre la comunidad de desarrolladores, debido a esto las compañías se están poniendo las pilas y trabajan para que sus tecnologías estén disponible para esta plataforma.

Ya disponemos de driver nativo de CouchBase para Node.js, como hemos visto en ejemplos con MongoDB, hoy vamos a ver como podemos acceder a un Bucket en CouchBase desde Node.

Lo primero de todo en nuestro directorio de trabajo, vamos a instalar el paquete CouchNode, para ello ejecutamos lo siguiente:
npm install couchbase
El ejercicio que vamos a realizar, consiste en sacar el listado de vendedores que tenemos en el Bucket hispabigdata, en el documento de ventas que dimos de alta en el ejercicio de como importar un fichero json.

En nuestro directorio de trabajo vamos a crear un fichero app.js en el que vamos a añadir el siguiente código.

viernes, 8 de noviembre de 2013

Cursos y webinars de bases de datos NoSQL

Después de diferentes practicas que hemos ido realizando, puede ser que aun necesiteis profundizar más en algunas Base de datos NoSQL, como pueda ser MongoDB, CouchBase o Cassandra por ejemplo. La mejor forma de profundizar es con la documentación oficial, la cual es bastante completa. Hoy os vamos a hablar de donde encontrar algunos cursos de interés o webinars.

Para MongoDB disponemos de 4 cursos gratuitos impartidos por MongoDb Inc y multitud de webinars:
  1. M101J: MongoDB for Java Developers: Este curso nos hace una introducción a MongoDB y como acceder a la base de datos a traves del driver que hay en Java.
  2. M101JS: MongoDB for Node.js Developers: La tecnología de moda no puede quedarse fuera, y MongoDb Inc ha dedicado uno de sus cursos a como usar MongoDB a través de Node.js.
  3. M101P: MongoDB for Developers: Este curso esta enfocado para programadores Python que deseen acercarse a MongoDB.
  4. M102: MongoDB for DBAs: MongoDb Inc se acuerda de los Administradores de sistemas y DBA creando un curso bastante interesante, el cual nos va a permitir ver todas la posibilidades que nos ofrece MongoDB.
  5. Webinars

viernes, 25 de octubre de 2013

Trabajando con Python, la API v1.1 de Twitter y MongoDB (Parte 2)

En el artículo anterior vimos como obtener información de nuestra cuenta de twitter atacando a la API v1.1. Hoy vamos a completar el ejemplo insertando nuestros datos en una base de datos MongoDB.
Lo primero que tenemos que tener a mano es nuestro es el script de creamos el otro día, podéis descargarlo desde aqui. También necesitamos los siguientes parámetros para conectar al servidor de MongoDB

  • Servidor donde tenemos alojado MongoDB, en nuestro ejemplo será localhost
  • Puerto por el que estableceremos conexión.
  • Nombre de la Base de datos que crearemos para este ejemplo.
  • Usuario con el que estableceremos conexión a la base de datos.
  • Contraseña con la que nos autenticaremos.
  • Nombre de la Colección donde almacenaremos los datos.

Ahora en el script vamos a realizar lo siguiente:

lunes, 21 de octubre de 2013

Trabajando con Python, la API v1.1 de Twitter y MongoDB (Parte 1)

Hoy en día, el auge de las redes sociales nos ofrece la posibilidad de recopilar muchísima información de la RED. Estos portales nos ofrecen su API, para que podamos desarrollar aplicaciones usando sus datos. Las grandes empresas usan este tipo de información para analizarla y conocer nuestras necesidades.

Hoy vamos a ver como podemos como podemos obtener información de la API v1.1 de Twitter. Para ello vamos a usar un modulo de python que nos va a facilitar el trabajo, posteriormente veremos como podemos guardar toda esta información en una base de datos MongoDB.

El objetivo de esta practica será sacar información de todos los amigos que seguimos en twitter, como por ejemplo la localización, el numero de seguidores y amigos que tienen y el numero de tweets enviados.

Lo primero que vamos a hacer sera registrarnos en Twitter si no tenemos una cuenta, en caso de que la tengamos, vamos a logarnos en el portal de desarrollo y vamos a crear una nueva aplicación, para tener acceso a los datos para acceder a la API, mediante autenticación OAuth.

viernes, 18 de octubre de 2013

Como actualizar Node.js a la ultima versión estable

Hace ya meses, os explicamos como instalar Node.js, después de este tiempo, Node se ha ido haciendo mas maduro y se han ido lanzando nuevas versiones estables y llega un momento en el que te ves con la necesidad de actualizar. Hoy os vamos a explicar como actualizar Node.js a la última versión estable disponible.

Lo primero de todo es comprobar nuestra versión de Node.js, para ello ejecutamos en una consola lo siguiente:
sudo npm --version
Una vez sabemos que versión tenemos, vamos a comenzar el proceso de actualización. Lo primero de todo será limpiar la cache que genera npm.
sudo npm cache clean -f
El siguiente paso es instalar n, una herramienta de administración de Node, que nos va a ayudar bastante.
sudo npm install -g n

martes, 15 de octubre de 2013

Como acceder a un Bucket en CouchBase a través de python

En articulos anteriores os explicamos como importar un fichero JSON en CouchBase, en dicho articulo os mostramos como instalar librería couchbase de python para atacar al SDK de CouchBase.

Pues hoy vamos a usar todo esto para ver como podemos acceder al Bucket que creamos a través de python y como mostrar los datos que importamos. Podemos hacerlo de diferentes formas, por ejemplo atacar a la API REST, o bien usando el cliente de python que ya tenemos instalado. Nosotros vamos a usar el cliente de python.

Para ello vamos a crear un fichero en el que escribiremos un scrypt en python, os lo podéis descargar desde aquí.

El código del fichero sería el siguiente:

viernes, 11 de octubre de 2013

RoboMongo una herramienta de administración para MongoDB

Después de la reciente noticia sobre la cotización de MongoDB, no es nada descabellado que cada vez existan mas productos relacionados con esta popular Base de datos NoSQL. Anteriormente os hemos hablado de RockMongo o de Genghis y hoy le toca el turno a RoboMongo otra herramienta de administración para MongoDB multiplataforma.

A diferencias con las mencionadas anteriormente RoboMongo no se basa en un sistema Web, sino que se instala como un cliente en nuestro equipo. Nos ofrecen la posibilidad de instalarlo tanto en Mac como en Windows o Linux (source, deb o rpm). Dicha instalación es bastante sencilla y no requiere de ningún conocimiento extra. Hoy os vamos a explicar como configurarlo para conectarnos a nuestro servidor MongoDB.

Lo primero de todo que vamos a hacer es arrancar dicho software, cuando lo abrimos por primera vez, tendremos que configurar una conexión, para ello pulsaremos en create y se nos abrirá en menú donde  poder introducir los datos de conexión de nuestro Servidor.

lunes, 7 de octubre de 2013

Como importar ficheros JSON en CouchBase

Hoy os vamos a explicar como importar ficheros JSON a CouchBase, para ello vamos a usar la herramienta cbdocloader, la cual se instala por defecto en la instalación de CouchBase 2.0 o superior, a demás vamos a preparar nuestro sistema para poder atacar al SDK de CouchBase a través de python. Para ello vamos a seguir los siguientes pasos:
  1. Instalar la librería libcouchbase para ello vamos a seguir las instrucciones que aparecen aquí.
  2. Instalar la librería couchbase de python, para ellos ejecutamos en consola lo siguiente:
    sudo pip install couchbase
    
  3. Ahora vamos a usar de ejemplo el fichero ventas.json de ejemplos anteriores adaptado para este ejemplo y lo comprimimos en ventas.zip
    wget https://dl.dropboxusercontent.com/u/24596087/ventas.json
    zip ventas.zip ventas.json
    
  4. En el servidor CouchBase http://localhost:8091 vamos a crear el Bucket llamado hispabigdata y la vista con el mismo nombre.

miércoles, 2 de octubre de 2013

Listado de proveedores con servicios gratuitos en la nube

Existen multitud de hosting en los cuales podemos alojar nuestros proyectos de forma gratuita, la mayoría de éstos únicamente se basan en MYSQL y PHP, con auto instaladores de software para CMS, tiendas electrónicas, galería de fotos. Pero... ¿Donde podemos alojar una base de datos en MongoDB? o ¿Donde podemos crear proyecto con Node.JS en la nube? Pues aunque no sea común, existen compañías que ofrecen estos servicios, algunas de ellas ofertan un tipo de plan gratuito donde alojar nuestros proyectos, hoy os vamos a hablar de algunas de ellas.

Listado de proveedores que ofrecen de forma gratuita alojamientos de servicios en la nube

Parse por HispaBigdata

Parse un lugar donde alojar nuestras aplicaciones en la nube sin necesidad de montar ningun servidor, parse trabaja con las plataformas IOS, OSX, Android, JavaScript, Windows Phone 8, Windows 8, .NET, Xamarin, Unity y REST API. A demás nos ofrecen un servicio de monitorización en tiempo real de nuestras aplicaciones o incluso ejecutar nuestros propios programas en la nube, con Parse podemos crear nuestras redes sociales en cuestión de minutos. Un servicio bastante interesante para comenzar a desarollar ya que su servicio gratuito esta bastante bien.

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

miércoles, 28 de agosto de 2013

Bases de datos NoSQL

Llevamos ya un tiempo hablando de NoSQL y de como ir haciendo cosas que antes realizábamos con SQL. Lo primero de todo quiero recordar, para los que aun no lo tengan claro, NoSQL equivale a las siglas de Not Only SQL (Structured Query Language), esto viene a que aun hay gente que piensa que NoSQL es la negación a SQL. Dejando esto a un lado y centrándonos un poco en el BigData, hoy os tenemos intención de hablaros de las mas famosas bases de datos que usan esta tecnología, teniendo en cuenta la cantidad de información que circula por la red, el uso de la redes sociales o la necesidad de las grandes empresas de trabajar con grandes cantidades de datos, son unos de los motivos por lo que se ha puesto de moda el uso de este tipo de base de datos.


Base de datos NoSQL:

MongoDb por HispaBigData

URL: www.mongodb.org/
Twitter: @MongoDBinc
Licencia: AGPL (Drivers: Apache)




MongoDB: Quizás la mas extendida, esta base de datos documental desarrollada por la compañía 10Gen (Recientemente MongoDB, Inc) esta basada en la tecnología clave-valor. Cuenta con una gran comunidad gracias a al sistema de formación de la compañía, realizando cursos continuamente sobre su sistema bajo otras tecnologías (Python, Node.js, Java...). MongoDB es usada en aplicaciones famosas como Foursquare, Sourceforge, Google, Facebook o New York Times.


domingo, 25 de agosto de 2013

Como eliminar un elemento de un Array en MongoDB con JavaScript

Hoy os voy a explicar la forma de como eliminar un elemento de un Array en MongoDB con JavaScript, el proceso es bastante sencillo y para ello vamos a usar la función splice de javascript para eliminar dicho elemento.
Supongamos que tenemos el siguiente array ['aa','bb','cc','dd','ee','ff'], podemos insertarlo en una colección de la siguiente forma:
db.coll.insert({array:['aa','bb','cc','dd','ee','ff']})
Insertar array por HispaBigData







Lo siguiente va a ser almacenar dicho array en una variable llamada data.
var data = db.coll.findOne()
Almacenar Array en Variable por HispaBigData

miércoles, 21 de agosto de 2013

Administrar CouchDB a través de Futon (Parte 2)

Anteriormente en HispaBigData vimos como acceder a la interfaz de administración Futon y como crear una base de datos. Hoy os vamos a explicar como securizar CouchDB para poder acceder a la base de datos de forma autenticada, para ello vamos a hacer lo siguiente:

  1. Accedemos a nuestra interfaz de Futon.
  2. http://localhost:5984/_utils/
    
  3. En el menú de la derecha, nos dirigimos a Tools > Configuration.

  4. Configuration_tools por HispaBigData







viernes, 16 de agosto de 2013

Recomendación de libros por HispaBigData II

Anteriormente en HispaBigData os recomendamos una serie de libros para adentrarnos en el mundo del BigData, hoy vamos a continuar con dicha recomendación con una serie de libros que os pueden ayudar a ampliar el conocimiento de las diferentes tecnologías usadas en BigData.


- Libros sobre CouchDB

CouchDB The definitive Guide por HispaBigdata
Definitiva Guía de CouchDB, libro de O'Relly escrito por tres de los creadores de CouchDB, J. Chris Anderson, Lehnardt y Noah Slater, el cual nos ayudará a comprender los conceptos básicos de almacenamiento de documentos, interactuar y manipular los datos almacenados en la base de datos a través de la interfaz REST o a través de consultas agregadas MapReduce. También explica como replicar datos entre nodos y como configurar el motor de base de datos para conseguir mayor fiabilidad y rendimiento. Este libro lo podemos encontrar traducido al Inglés, Alemán, Francés y Español.


miércoles, 7 de agosto de 2013

Administrar CouchDB a través de Futon (Parte 1)

En la entrada anterior hemos visto como instalar CouchDB en linux. Hoy vamos a ver como administrar CouchDB a través de la interfaz de administración Futon. En la breve introducción a que os hicimos, comentamos que este Gestor de Bases de Datos esta basado en entorno web, el cual usa principalmente solicitudes HTTP. CouchDB dispone de una interfaz gráfica de administración bastante fácil de usar, la cual nos va a permitir realizar las solicitudes HTTP de forma transparente para nosotros.

Si hemos realizado la instalación que os inficamos, accederemos a Futon desde nuestro navegador web de la siguiente forma:
http://localhost:5984/_utils/
Interfaz de aministración Futon por HispaBigData


miércoles, 31 de julio de 2013

Cómo instalar CouchDB en Linux

Después de la breve introducción a CouchDB que hicimos en la entrada anterior, hoy vamos a explicar cómo instalar CouchDB en linux. Nuestra recomendación es realizar la instalación desde el source ya que cumpliendo los requisitos de dependencias se podría instalar en cualquier linux.

Lo primero de todo es tener en cuenta el listado de dependencias que necesitamos:
  1. Instalación de las dependencias

sábado, 27 de julio de 2013

Introducción a CouchDB

En entradas anteriores hemos estado hablando de MongoDB, existen otras base de datos NoSQL como por ejemplo CouchDB, al igual que MongoDB, se basa en JSON para almacenar datos y JavaScript como lenguaje de consulta. CouchDB es de código abierto, fue liberada por primera vez en 2005, transformándose en un proyecto Apache en 2008. Couch es un acrónimo para cluster of unreliable commodity hardware, una de sus características principales es la facilidad con la que permite hacer replicaciones, a demás CouchDB se basa principalmente en solicitudes HTTP.

Como hemos indicado anteriormente, las consultas en CouchDB se realizan por medio de MapReduce y HTTP como API. A través de la interfaz REST se accede a los métodos HTTP POST, GET, PUT y DELETE por medio de las operaciones de Create, Read, Update, Delete, este proceso es conocido como CRUD, usando un indentificador único o URI.

Por ejemplo, supongamos que tenemos una colección llama articulos y un documento con la siguiente estructura:
{
   "_id" : "832t41121621a326ec63382f846d3142",
   "_rev" : "1-524521c989ff07s4fa62dad0366677b5",
   "nombre" : "Daniel Romero",
   "articulo" : "CouchDB en HispaBigData",
   "blog" : "HispaBigData",  
}

lunes, 22 de julio de 2013

Trabajando con Indices en MongoDB (2 Parte)

La semana pasada estuvimos viendo la primera parte de como trabajar con indices en MongoDB, en esta semana vamos a explicar como crear indices en un Replica Set.

El procedimiento para crear un indice en un Replica Set es el siguiente:

  1. Convertir un nodo secundario en modo standalone: Vamos a parar el proceso mongod, y lo iniciamos sin la opción --replSet y con un puerto diferente al que usa habitualmente, así podemos trabajar con el en modo standalone, nosotros usaremos por ejemplo el 48018.
    mongod --port 48018
  2. Crearemos el indice o lo reconstruimos en el nodo que hemos dejado en modo standalone:
    db.Coleccion.ensureIndex( { campo: 1 } ) 
  3. Una vez vez el indice se haya construido volvemos a levantar el nodo con la opción --replSet y el mismo puerto en el que trabaja habitualmente, suponiendo que usa el puerto 27017 y que el nombre del Replica Set es NombreReplicaSet0.
     mongod --port 27017 --replSet NombreReplicaSet0 

miércoles, 17 de julio de 2013

Trabajando con Indices en MongoDB (1 Parte)

En cualquier sistema de base de datos, SQL o NoSQL, es muy importante el uso de índices para procesar búsquedas(querys) de forma rápida y eficiente. En MongoDB cuando creamos una colección, ésta crea por defecto un indice en el campo _id permitiéndonos crear un índice en cualquier campo de un documento.

La forma de crear un indice es la siguiente:
db.coleccion.ensureIndex( { "campo": 1 } ) 
EnsureIndex() únicamente crea el índice si este no existe, usaremos un 1 si queremos que la ordenación sea ascendente y -1 si es descendente.

Crear un índice provoca un bloqueo en la colección, por lo que si creamos un índice en una colección con gran cantidad de documentos podemos dejarla bloqueada con el riesgo de si estamos usando algún aplicativo en producción que use esta colección podría producir errores. La forma que tenemos para solucionar esto es crear el indice en Background.
db.coleccion.ensureIndex( { "campo": 1 }, { background: true } ) 
Por defecto MongoDB establece la opción de Background a false.

domingo, 30 de junio de 2013

Consulta de documentos que contienen un campo en MongoDB

Hemos vistos anteriormente que en MongoDB los documentos pueden tener una estructura diferente, algunos campos pueden estar presente en un documento y otros no. Para ello vamos a explicar como mostrar todos los documentos que contengan un campo especifico.
Supongamos que tenemos la siguiente coleccion llamada Personal;
db.personal.insert({ nombre: "Daniel Romero", año: "2013", profesion: "Informatico", blog:"HispaBigData"});
db.personal.insert({ nombre: "Alberto Hernandez", año: "2012", profesion: "Informatico", blog:"HispaBigData"});
db.personal.insert({ nombre: "Raul Garcia", año: "2010", profesion: "Pintor"});
db.personal.insert({ nombre: "Manuel Sanchez", año: "2011", profesion: "Arquitecto"});
db.personal.insert({ nombre: "Antonio Gallardo", año: "2012", profesion: "Diseñadir", blog:"Diseñate"});
Coleccion de personal por HispaBigdata

miércoles, 26 de junio de 2013

Replicación en MongoDB (2 parte)

En la siguiente entrada vamos a poner en practica una arquitectura de replicación con dos instancias mongod (primaria-secundaria) utilizando solo un servidor.

Es sabido que lo ideal seria poder estructurar cada instancia mongo en servidores distintos pero ahora  nos conviene realizar una sencilla configuracion para luego poder ejecutar todos estos conocimientos en un entorno de producción bien redimensionado.

Para empezar vamos a crear los directorios donde alojamos el contenido de cada una de las dos  instancias:

mkdir -p /data/rp1 /data/rp2

Luego levantamos los procesos mongod con las siguientes secuencias de parámetros:

Primary:
mongod --port 27017 --dbpath /data/rp1 --replSet reptest --smallfiles --oplogSize 128 
 
Secundary:
mongod --port 27018 --dbpath /data/rp2 --replSet reptest --smallfiles --oplogSize 128

 --port : puerto por el que escucha el proceso.

--dbpath : path donde vamos alojar los datos de cada instancia

--replSet : Nombre de la replica a la que pertenece este proceso mongod

--smallfiles : Como comenté en anteriores entradas solo sirve para crear ficheros opslogs de menor
                     tamaño, utilizar solo para entornos de testing.


lunes, 24 de junio de 2013

Modificar el esquema de un documento en MongoDB

Hoy os voy a explicar como modificar el esquema (schema) de un documento existente, de forma fácil, en MongoDB. Para ello vamos conectarnos a nuestro servidor MongoDB y vamos a realizar los siguientes pasos.
  1. Vamos a insertar dos documentos en una colección de ejemplo llamada ejemplo.
     
    db.ejemplo.save({'name':'Daniel Romero', 'pais':'España', 'especialidad':'nodejs'})
    
    Insert del primer documento por HispaBigData
     
    db.ejemplo.save({'name':'Alberto Hernandez', 'pais':'España'})
    
    Insert del segundo documento por HispaBigData

    Como podéis ver los dos documentos que hemos insertado tienen un esquema (schema) diferente, este último no dispone del campo especialidad, esto lo hemos hecho de forma intencionada para poder manipularlos.

martes, 18 de junio de 2013

Como subir una imagen a nuestro servidor con Node.js y Express

En días anteriores hemos visto como trabajar con Node.js y Express, hoy os vamos a explicar como subir una imagen a nuestro servidor con Node.js. Para ello nos vamos a basar en el proyecto que ya creamos para explicaros como validar un formulario en Node.js.

Lo primero de todo que vamos a hacer es crear en nuestra directorio /routes el fichero upload.js dentro de él vamos a crear dos funciones.

La primera se va a encargar de cargar el formulario en el que vamos a insertar la imagen (fichero upload.jade que veremos mas adelante):

exports.upload = function(req, res){
  res.render('upload',{ title: 'ejemplo de subida de imagen por HispaBigData' });
};

jueves, 13 de junio de 2013

Recomendación de libros por HispaBigData

Hoy en día tenemos mucha facilidad para llegar a la información a través de internet. Con la cantidad de blog y portales de información que existen, podemos estar al día de todo. Pero a veces cuando queremos buscar aquello que necesitamos no lo encontramos, existen multitud de aplicaciones que nos puede facilitar esto y guardar los enlaces que queramos, para leerlos posteriormente.

Dese HispaBigData vamos a hacer una función aproximada de dichas aplicaciones (Pocket, Evernote...) y así recomendaros una serie de libros para que los tengáis siempre a mano, para cuando lo necesitéis.

- Libros sobre NODE.JS


La guía de Node en Español por HispaBigData

La guía de Node en español, escrita por Arturo Muñoz de la Torre es un libro gratuito de 240 páginas en el que se realiza un recorrido por los distintos módulos que Node.js ofrece para desarrollar todo tipo de aplicaciones de red: dgram (UDP), net (TCP), http (HTTP), Express, Connect, Moongose (MongoDB) y Socket.IO (tiempo real). Todos los módulos vienen acompañados de aplicaciones de ejemplo: una sencilla implementación del protocolo RTP, una shell remota, una red social clon de Twitter o Top Memory (un juego en tiempo real de habilidad).

martes, 11 de junio de 2013

Primeros pasos con Node.JS (3 parte)

Una vez hemos visto como instalar node.js y express vamos a crear un formulario de contacto y validar sus campos, para ir viendo como funciona express.

Para realizar esto vamos a usar el módulo express-validator
 npm install express-validator 
Vamos a modificar paso a paso el template por defecto que genera express:

- 1º Vamos a generar nuestro "código" html adaptado a Jade.

En la ruta /views vamos a encontrar los ficheros .jade que son los encargados de generar el código html de nuestra pagina. El fichero layout.jade es donde vamos a definir el "esquema" de nuestro portal:
doctype 5
html
  head
    title #{title}
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    header
      h1 #{title}
    block content
    block contact

jueves, 6 de junio de 2013

Primeros pasos con Node.JS (2 parte)

Hemos visto anteriormente como instalar node.js en linux, hoy os vamos a hablar que es npm y explicar como instalar el módulo express para crear nuestro propio servidor web y servir paginas desde ahí.

Realizando estas pruebas nos hemos encontrado con problemas a la hora de instalar módulos y las dependencias de los mismo a traves de npm, al parecer los dns de npm están teniendo problemas tal y como confirman en su twitter oficial.Para solucionar estos problemas debemos de editar nuestro fichero /etc/hosts y añadir la siguiente linea:
 
173.192.57.100 http://registry.npmjs.org

¿Qué es npm? 

NPM es el gestor de paquetes que incluye el framework de Node.js, si funcionamiento es muy similar al de los gestores de paquetes de distribuciones linux como Red Hat (rpm) o Debian (apt-get), pero se diferencia en que este al descargarse al módulo, lo añade al proyecto que vayamos a realizar, de esta forma lo tiene disponible para que pueda ser distribuido.

Para ver como funciona vamos a instalar express un framework para crear aplicaciones web en node.

lunes, 3 de junio de 2013

Como realizar un Backup en MongoDB con Mongodump

Mongodump es la aplicación por defecto parar realizar copias de seguridad del contenido de una instancia mongodb, el formato utilizado es el bson que  presenta de forma binaria las estructuras de datos y sus mapas.

Los backups se pueden ejecutar en modo consistente o inconsistente.

Para efectuar una copia inconsistente, la instancia tiene que estar levantada, aquí os dejo algunos ejemplos:
  • backup a una base de datos (opción -d {nombre de la base de datos} -o {directorio}):
 
mongodump -h localhost -d spotify -o spotydump
backup a una base de datos por hispabigdata

Primeros pasos con Node.JS (1 parte)

En mis próximas entradas en HispaBigData nos vamos a adentrar en el mundo de Node.js en una serie de artículos, explicando en que consiste, porque usarlo y explicaremos como crear nuestro servidor para servir paginas Web.

¿Qué es Node.js?

Node.js es un entorno de programación Javascript en el lado de la capa de servidor, esta basado en el motor de Javascript de Chrome (V8). Este entorno cambia la forma de trabajar, ya que esta diseñado en un modelo orientado a eventos, su meta es la creación de aplicaciones altamente escalables, permitiendo crear decenas de miles de conexiones simultaneas en mismo servidor, algo impensable en los entornos mas usados hoy en día como Apache + PHP o TOMCAT + JAVA.

¿Como puede Node.js conseguir ejecutar decenas de miles de peticiones simultaneas en un mismo servidor? Para contestar esta pregunta vamos a tomar como ejemplo el Servidor Web Apache, el cual crea un nuevo hilo por cada conexión cliente-servidor, éstos van consumiendo una cantidad de memoria y a medida que las peticiones van aumentando el rendimiento de nuestro servidor va disminuyendo, debido a que el proceso de creación de un nuevo hilo es bastante costoso, de esta forma ,si nuestro Portal web recibe miles de peticiones concurrentes, debemos balancear dichas peticiones entre diferentes servidores Apache aumentando el coste en infraestructura.
En una aplicación en Node.js solo corre un único hilo de ejecución, por cada conexión recibida, lanza un evento disparador dentro del motor de ejecución (V8), únicamente en el caso de que nuestra aplicación realizase una operación bloqueante, se crearía un nuevo hilo de ejecución, de esta forma podemos conseguir miles de conexiones concurrentes con menor consumo de memoria que en Apache.

miércoles, 29 de mayo de 2013

Manipulando datos con MapReduce en MongoDB

Después de haber tratado anteriormente como manipular datos con Aggregation Framework, hoy os vamos a hablar de MapReduce y como poder realizar operaciones de agregaciones complejas en nuestra base de datos Mongo.

Este sistema es ejecutado directamente en el lado del servidor, por lo que no tenemos que descargar previamente los datos que deseamos manipular. En MapReduce definimos funciones en JavaScript  para manipular dichos datos, estas funciones se basan en los conceptos:

  • Map() Usada para agrupar los datos a manipular en forma de par - valor, uniendo todos los pares con la misma clave en un mismo grupo, con esto indicamos mediante una función JavaScript que datos son los que deseamos usar.
  • Reduce() Esta función recibe de Map() cada grupo de claves y una matriz con los valores por cada grupo, para poderlos poderlos tratar y devolver un valor único.

Esquema MapReduce

martes, 28 de mayo de 2013

Replicación en MongoDB (1 parte)

A partir de ahora incluiremos una serie de entradas para explicar como MongoDB permite replicar datos entre instancias secundarias.

Estos miembros secundarios pueden cumplir diferentes funciones dentro del ecosistema de replicación (se explicaran mas abajo).

El mecanismo o fichero donde se guardan todos los cambios del servidor primario para ser replicados se llama Oplog  y envía estos datos de forma asincrona.

Su tamaño puede ser cambiado con la opción  oplogSize, pero es recomendable configurarlo antes de levantar la instancia porque por defecto el proceso mongod lo inicializa con los siguientes tamaños según el sistema donde se encuentre instalado:
  • Un tamaño del 5% del total del espacio libre del filesystem en sistemas Linux, Solaris, Freebsd y Windows de 64bits.
  • Para MacOS de 64bits se inicializa con un tamaño de 183Mb.
  • Y en sistemas de 32bits tan solo con 48Mb.

Se recomienda tener un Oplog lo bastante grande para contener datos durante 24 horas.

Imaginate el hipotetico caso de tener replicas paradas por algun problema en la red que impide la conexión entre ellas, si estas replicas logran conectarse de nuevo dentro de esas 24 horas no hay necesidad de recostruirlas, directamente el primario se encargará de enviar los datos guardados en el oplogs  para su  recuperación.

viernes, 24 de mayo de 2013

Administrando MongoDB desde RockMongo

Hoy vamos a explicar como instalar la herramienta de administración Web RockMongo en nuestro servidor. Es una herramienta similar a PHPmyAdmin escrita en PHP5, la cual nos va a permitir administrar nuestro servidor Mongo de forma cómoda.

Requisitos:
  • Tener instalado un servidor web como por ejemplo Apache.
  • Versión de PHP v5.1.6 o superior.
  • Instalación del modulo php_mongo.

No me voy a adetrar en la intalación/configuración de Apache y PHP ya que lo podemos instalar desde nuestro repositorio y es un tema bastante extenso, por lo que únicamente os voy a explicar como instalar el modulo de php_mongo y como acceder a RockMongo.

martes, 21 de mayo de 2013

Manipulando datos con Aggregation framework en MongoDB

Hemos visto anteriormente como manipular datos en MongoDB, insertando o realizando búsquedas sencillas para adentrarnos en el mundo de NoSQL.

Hoy os voy a hablar de Aggregation Framework, un método para manipular datos de forma sencilla que podemos encontrar a partir de la versión 2.2 de MongoDB. Para los que estamos acostumbrados a usar SQL, veremos que este metodo es muy similar en el concepto de realizar simples querys en SQL. Al igual que un shell script en linux, usaremos operadores de pipelines(tuberías), de esta forma conseguimos redirigir la salida de un proceso a otro y así afinar los resultados de nuestra query.

 Lo operadores de pipelines(tuberías) que podemos usar en Aggregation Framework son:

  •  $project -> Usado para añadir, renombrar, eliminar o realizar operaciones sobre campos de un documento.
  •  $match -> Este operador podemos realizar condiciones para afinar nuestra busqueda sobre documentos (En sql seria el equivalente a WHERE).
  •  $limit -> Al igual que en SQL, con limit podemos delimitar el numero de documentos obtenidos.
  •  $skip -> Con skip podremos saltarnos el numero de documentos que indiquemos.
  •  $unwind -> Devuelve los elementos de un array como una secuencia de documentos, es decir, un documento por cada miembro del array.
  •  $group -> Se usa para agrupar documentos con el propósito de calcular valores agregados basados en una colección es el equivalente al Group by en SQL.
  •  $sort -> Con sort podemos ordenador nuestra query por el campo indicado. 

La forma de usar los operadores es la siguiente:

viernes, 17 de mayo de 2013

Resize journal en mongodb

Los archivos de journal en mongodb son binarios y secuenciales, en apariencia tienen la misma funcionalidad que los binlogs y archivelogs de MySQL y Oracle, sirven para salvar las transacciones a disco antes de escribirse a sus respectivos datafiles, consiguiendo que los datos sean consistentes ante un fallo o error inesperado del proceso mongod.

Por defecto, mongodb escribe o valida la información del archivo journal al datafile cada 100milisegundos.
Este valor puede ser cambiado con el parámetro :
--journalCommitInterval <value>
Puedes deshabilitar el uso del journal descomentando el parámetro nojournal en el archivo de configuración.

 
[root@localhost mongo]# cat /etc/mongod.conf | grep jour
# Disables write-ahead journaling
# nojournal = true

Manipulación de datos con MongoDB

Adentrándonos en el mundo de MongoDB y el NoSQL, nos encontramos con el uso de BSON (Binary JSON) que es un formato de intercambio de datos usado principalmente para su almacenamiento y transferencia en la base de datos de MongoDB, diseñado para tener un almacenamiento y velocidad más eficiente que JSON.

En BSON disponemos de los siguientes tipo de datos los cuales podremos almacenar en nuestra Base de datos:

  • Cadena de caracteres (String)
  • Enteros de 32 o 64 bits
  • Tipo de dato real de 64 bits IEEE 754
  • Fecha (número entero de milisegundos en Tiempo Unix)
  • Array de bytes (datos binarios)
  • booleano
  • Nulo (null)
  • Objeto BSON
  • Array BSON
  • Expresiones Regulares
  • Código JavaScript

Vamos a ir viendo una serie de ejemplos de como manipular las colecciones y documentos en MongoDB utilizando la consola.

Para crear una colección de documentos en MongoDB, se puede usar la siguiente instrucción:
db.coleccion.insert( <documento> )
db.coleccion.insert( <documento> )