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.