1 tutorial de mongo db

Preview:

Citation preview

UNIVERSIDAD DE LOS ANDES

REDES SOCIALES

Ing. Diego Hernando Torres Valencia

Tópicos Especiales: Ciencias de los datos aplicadas a las redes sociales

1. MAP REDUCE

2. PROYECTO EN PHP

1.1. Mongo db

Ing. Diego Hernando Torres Valencia

CONTENIDO:

UNIVERSIDAD DE LOS ANDES

REDES SOCIALES MAP REDUCEMapReduce es un modelo de programación utilizado por Google para dar soporte a la computación paralela sobre grandes colecciones de datos en grupos decomputadoras y al commodity computing. El nombre del framework está inspirado en los nombres de dos importantes métodos, macros o funciones en programación funcional: Map y Reduce.

MapReduce ha sido adoptado mundialmente, ya que existe una implementación OpenSource denominada Hadoop. Su desarrollo fue liderado inicialmente por Yahoo y actualmente lo realiza el proyecto Apache.

En esta década de los años 2010 existen diversas iniciativas similares a Hadoop tanto en la industria como en el ámbito académico. Se han escrito implementaciones de bibliotecas de MapReduce en diversos lenguajes de programación como C++, Java y Python.

MapReduce se emplea en la resolución práctica de algunos algoritmos susceptibles de ser paralelizados.No obstante MapReduce no es la solución para cualquier problema, de la misma forma que cualquier problema no puede ser resuelto eficientemente por MapReduce.Por regla general se abordan problemas con datasets de gran tamaño, alcanzando los petabytes de tamaño. Es por esta razón por la que este framework suele ejecutarse en sistema de archivos distribuidos (HDFS)

REDES SOCIALES MAP REDUCE

La función map(): se encarga del mapeo y es aplicada en paralelo para cada ítem en la entrada de datos. Esto produce una lista de pares (k2,v2) por cada llamada. Después de eso, el framework de MAPREDUCE junta todos los pares con la misma clave de todas las listas y los agrupa, creando un grupo por cada una de las diferentes claves generadas.

La función reduce(): cada llamada a Reduce típicamente produce un valor v3 o una llamada vacía, aunque una llamada puede retornar más de un valor. El retorno de todas esas llamadas se recoge como la lista de resultado deseado.

BIG DATA = Leer un monton de datos

MAP =Extraer algo que te importa de cada registro Baraja y Ordenar

REDUCE=Agregado, resumir, filtrar o transformar los resultados escritos.

MONGODB: Características BBDD orientadas a Documentos

• Modelo de datos: colecciones de documentos que contienen colecciones de claves-valor

• Ejemplos: CouchDB, MongoDB

• Buenas en:

– Modelado de datos natural

– Amigables al programador

– Desarrollo rápido

– Orientas a la web: CRUD

• Una base de datos orientada a documentos es un programa diseñado para almacenar, recuperar y gestionar información semi-estructurada orientada a documentos: – Un documento encapsula información en un formato estándar (XML,

YAML, JSON o BSON):

• Los documentos en una BBDD orientada a documentos son similares a registros pero no requieren un esquema estándar con la mismas secciones, huecos, partes, claves y similar

• Los documentos suelen ser direccionables por una clave que los representa unívocamente

• Además de la búsqueda por clave de documento, estas BBDD suelen ofrecer una API o lenguaje de consultas que permite recuperar documentos en base a sus contenidos

MONGODB: Características BBDD orientadas a Documentos

MongoDB

BASES DE DATOS QUE USAN LAS GRANDES EMPRESAS

Empresa Base de datos

Foursquare MongoDB

Foursquare es un servicio basado en localización web aplicada a las redes sociales. La geolocalización permite localizar un dispositivo fijo o móvil en una ubicación geográfica

La idea principal de la red es marcar (check-in) lugares específicos donde uno se encuentra e ir ganando puntos por «descubrir» nuevos lugares; la recompensa son las "Badges", una especie de medallas, y las "Alcaldías" (Mayorships), que son ganadas por las personas que más hacen "check-ins" en un cierto lugar en los últimos 60 días. A partir de la información que los usuarios han ido introduciendo, el servicio ha ido evolucionando hacia un motor de recomendaciones que sugiere lugares interesantes de manera inteligente.

• MongoDB (de la palabra en ingles “humongous” que significa enorme) es un sistema de base de datos NoSQL orientado a documentos

• MongoDB guarda estructuras de datos en documentos tipo BSON (Binary JSON (JSON Binario) con un esquema dinámico , haciendo que la integración de los datos en ciertas aplicaciones sea mas fácil y rápida.

• The MongoDB Manual:– http://docs.mongodb.org/manual/

MongoDB

Características Principales• Consultas Ad hoc

– MongoDB soporta la búsqueda por campos, consultas de rangos y expresiones regulares. Las consultas pueden devolver un campo específico del documento pero también puede ser una función JavaScript definida por el usuario.

• Indexación

– Cualquier campo en un documento de MongoDB puede ser indexado, al igual que es posible hacer índices secundarios. El concepto de índices en MongoDB es similar a los encontrados en base de datos relacionales.

• Replicación

– MongoDB soporta el tipo de replicación maestro-esclavo. El maestro puede ejecutar comandos de lectura y escritura. El esclavo puede copiar los datos del maestro y sólo se puede usar para lectura o para copia de seguridad, pero no se pueden realizar escrituras. El esclavo tiene la habilidad de poder elegir un nuevo maestro en caso del que se caiga el servicio con el maestro actual.

• Balanceo de carga

– MongoDB se puede escalar de forma horizontal usando el concepto de “shard”.

– El desarrollador elije una llave shard, la cual determina como serán distribuidos los datos en una colección. los datos son divididos en rangos (basado en la llave shard) y distribuidos a través de múltiples shard.

– Un shard es un maestro con uno o más esclavos.

– MongoDB tiene la capacidad de ejecutarse en múltiple servidores, balanceando la carga y/o duplicando los datos para poder mantener el sistema funcionando en caso que exista un fallo de hardware.

• Almacenamiento de archivos

– MongoDB puede ser utilizado con un sistema de archivos, tomando la ventaja de la capacidad que tiene MongoDB para el balanceo de carga y la replicación de datos utilizando múltiples servidores para el almacenamiento de archivos.

– Esta función (que es llamada GridFS ) está incluida en los drivers de MongoDB y disponible para los lenguajes de programación que soporta MongoDB.

• Agregación

– La función MapReduce puede ser utilizada para el procesamiento por lotes de datos y operaciones de agregación. Esta función permite que los usuarios puedan obtener el tipo de resultado que se obtiene cuando se utiliza el comando SQL “group-by”.

• Ejecución de JavaScript del lado del servidor

– MongoDB tiene la capacidad de realizar consultas utilizando JavaScript, haciendo que estas sean enviadas directamente a la base de datos para ser ejecutadas.

Casos de uso de MongoDB

• Almacenamiento y registro de eventos

• Para sistemas de manejo de documentos y contenido

• Comercio Electrónico

• Juegos

• Problemas de alto volumen

• Aplicaciones móviles

• Almacén de datos operacional de una página Web

• Manejo de contenido

• Almacenamiento de comentarios

– Votaciones

– Registro de usarios

– Perfiles de usuarios

– Sesiones de datos

• Proyectos que utilizan metodologías de desarrollo iterativo o ágiles

• Manejo de estadísticas en tiempo real

MongoDB

• Similar a CouchDB

• Pretende combinar lo mejor de los almacenes clave/valor, bases de datos de documentos y RDBMS

• Hace uso de JSON y tiene su propio lenguaje de consultas

• Implementada en C++

• Es quizás el motor NoSQL más popular

• Usada por SourceForge, Bit.ly, Foursquare o GitHub

• URL: http://www.mongodb.org/

Manipulación de Datos: colecciones y documentos

• MongoDB guarda la estructura de los datos en documentos tipo JSON (JavaScript Object Notation) con un esquema dinámico llamado BSON, lo que implica que no existe un esquema predefinido.

• Los elementos de los datos son llamados documentos y se guardan en colecciones

• Una colección puede tener un número indeterminado de documentos

– Las colecciones son como tablas y los documentos

– Cada documento en una colección puede tener diferentes campos.

• La estructura de un documento es simple y compuesta por “key-value pairs” parecido a las matrices asociativas en un lenguaje de programación

– Como valor se pueden usar números, cadenas o datos binarios como imágenes o cualquier otro “key-value pairs”.

Ejemplo de documento en MongoDB

{

"_id":

ObjectId("4efa8d2b7d284dad101e4bc7"),

"Last Name": "PELLERIN",

"First Name": "Franck",

"Age": 29,

"Address": {

"Street": "1 chemin des Loges",

"City": "VERSAILLES"

}

}

Utilidades de MongoDB• Los siguientes comandos pueden ser instalados para el manejo y la administración del

sistema de base de datos:• mongo: es un Shell interactivo que permite a los desarrolladores ver, insertar, eliminar y

actualizar datos en su base de datos. Este también permite entre otras funciones la replicación de información, configurar los Shards, apagar los servidores y ejecutar JavaScript.

• mongostat: es un instrumento de línea de comandos que muestra en resumen una lista de estadísticas de una instancia de MongoDB en ejecución. Esto te permite visualizar cuantas inserciones, actualizaciones, eliminaciones, consultas y comandos se han ejecutado, pero también cuanta memoria esta utilizando y cuanto tiempo ha estado cerrada la base de datos.

• mongotop: es un instrumento de línea de comandos que provee un método para dar seguimiento a la cantidad de tiempo que dura una la lectura o escritura de datos en una instancia. También provee estadísticas en el nivel de cada colección.

• mongosniff: es un instrumento de línea de comandos que provee un sniffing en la base de datos haciendo un sniffing en el tráfico de la red que va desde y hacia MongoDB.

• mongoimport/mongoexport: es un instrumento de línea de comandos que facilita la importación exportación de contenido desde JSON, CSV o TSV. También tiene el potencial de importar o exportar hacia otros formatos.

• mongodump/mongorestore: es un instrumento de línea de comandos para la creación de una exportación binaria del contenido de la base de datos. Estos comandos son utilizado para la estrategia de copias de seguridad cuando se utiliza MongoDB.

Documentación e instalación

• La documentación completa de MongoDB puede encontrarse en:

– http://docs.mongodb.org/manual/

• Instrucciones para instalar MongoDB en Windows:

– Descargar de: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/

– Crear directorio de datos: mkdir data/db

– Ejecutar el comando: mongod.exe --dbpath ..\data\db

– Ejecutar el cliente de mongo y los siguientes comandos en JavaScript:C:\Programming\utilities\mongodb-win32-x86_64-2.0.6\bin>mongo

MongoDB shell version: 2.0.6

connecting to: test

> db.test.save( {a:1} )

> db.test.find()

{ "_id" : ObjectId("4fe6e41b184d3a26629be9b6"), "a" : 1 }

>

Usando MongoDB• mongo es un shell JavaScript completo, cualquier función JavaScript, sintáxis o clase puede usarse en el shell

use mydb

j = { name : "mongo" };

t = { x : 3 };

db.things.save(j);

db.things.save(t);

db.things.find();

for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});

db.things.find();

// Iterate through the remaining items

it

// Store the cursor of the DB in a variable

var cursor = db.things.find();

while (cursor.hasNext()) printjson(cursor.next());

// Use functional features of JavaScript

db.things.find().forEach(printjson);

// cursor like an array

var cursor = db.things.find();

printjson(cursor[4]);

// The query expression is an document itself.

db.things.find({name:"mongo"}).forEach(printjson);

db.things.find({x:4}).forEach(printjson);

db.things.find({x:4}, {j:true}).forEach(printjson);

Documentos de consulta• Documentos que indican el patrón de claves y valores que deben ser

localizados

• Ejemplos:– SELECT * FROM things WHERE name="mongo“

• db.things.find({name:"mongo"}).forEach(printjson);

– SELECT * FROM things WHERE x=4

• db.things.find({x:4}).forEach(printjson);

– SELECT j FROM things WHERE x=4

• db.things.find({x:4}, {j:true}).forEach(printjson);

– Recuperar el primer elemento que cumple alguna restricción:• printjson(db.things.findOne({name:"mongo"}));

– Limitar el número de resultados:• db.things.find().limit(3);

• More info at:– SQL to Mongo Mapping Chart

• http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

GridFS

• GridFS is a specification for storing large files in MongoDB– The database supports native storage of binary data

within BSON objects

– BSON objects in MongoDB are limited in size (4MB older versions, 16MB in v1.7/1.8, higher limits in the future)

• GridFS spec provides a mechanism for transparently dividing a large file among multiple documents– Each file has a metadata object in a files collection, and one or more

chunk objects in a chunks collection.

• URL: http://www.mongodb.org/display/DOCS/GridFS– Specification:

http://www.mongodb.org/display/DOCS/GridFS+Specification

MongoDB and Java

• Java Tutorial: http://www.mongodb.org/display/DOCS/Java+Tutorial

• Una lista de buenos ejemplos en MongoDBprogramados con Java:

– http://www.mkyong.com/tutorials/java-mongodb-tutorials/

• Ejemplo using GridFS con MongoDB

– http://www.mkyong.com/mongodb/java-mongodb-save-image-example/

PRATICA con MongoDB

MongoDBAcceder al icono del softwareNecesitamos instalar el software Robomongo para administrar

la base de datos MongoDB, ya que por medio del software :Robomongo podemos visualizar por medio de una interfaz grafica y administrar la base MongoDB de forma mas sencilla.

PAGINA DE DESCARGA:

http://robomongo.org/

Administrador de interfaces de usuario : robomongo

PAGINA DE DESCARGA: http://robomongo.org/ Acceder al icono del software

Administrador de interfaces de usuario : robomongo

PAGINA DE DESCARGA: http://robomongo.org/

Realizo la instalación del programa que me permite administrar por medio de la interfaz graficaLa base de datos MongoDB.

Acceder al icono del software

Administrador de interfaces de usuario : robomongo

CREAMOS LA CONEXIÓN A LA BASE DE DATOS MONGODB.

Administrador de interfaces de usuario : robomongo

Guardamos la CONEXIÓN A LA BASE DE DATOS MONGODB.

Administrador de interfaces de usuario : robomongo

Realizar la CONEXIÓN A LA BASE DE DATOS MONGODB.

NOTA: PARA REALIZAR LA CONEXIÓN CON LA BASE DE DATOS MONGODB, HAY QUE INICIAR LOS SERVICIOS DE LA BASE DE DATOS POR MEDIO DE 2 TERMINALES SHELL O CMD,como muestro mas adelante

MongoDBComenzamos la pratica para Gestionar la base de datos MongoDB por medio del terminal o consola de Windows:

MongoDB

Gestionar la base de datos MongoDB por medio del terminal o consola de Windows:

Abrimos dos terminales para ejecutar la base de datos: MongoDB

MongoDB1. CREAR CONEXIÓN EN UNA PRIMERA VENTANA SHELLC:\Program Files\MongoDB 2.6 Standard\bin>mongod.exe

2. CORRER MONGO EN UNA SEGUNDA VENTANA SHELL

C:\Program Files\MongoDB 2.6 Standard\bin>mongo.exe

ABRIR DOS VENTANAS SHELL

MongoDB

Gestionar la base de datos MongoDB por medio del terminal o consola de Windows:

Seguiremos utilizando las dos terminales para ejecutar la base de datos: MongoDB

NOTA: IMPORTANTE: En la segunda ventana donde colocamos a correr mongo, por medio del Comando: mongo.exe , en esta segunda ventana o terminal cmd ; vamos a trabajar con Diferentes comandos para insertar documentos en la base de datos: MongoDB

MongoDBEn la segunda ventana Shell o cmd, colocamos el comando:

1.INSERTAR DATOS> db.test.save( {a:1} )

MongoDBEn la segunda ventana Shell o cmd, colocamos el comando:

2.CONSULTAR DATOS> db.test.find()

MongoDB: comando helpEn la segunda ventana Shell o cmd, colocamos el comando help

MongoDB: comando show dbsCOMANDO: show dbsMostrar todo lo que hay adentro de mongo o que bases de datos hay.show dbs

MongoDB: comando use

COMANDO: useCrear una base de datos.use miPrimeraBasededatos

MongoDB: comando de asignación =para crear variables

COMANDO DE ASIGNACIONIntroducir algo a la base de datos. Crear unas variables con datos..a = { nombre: “Diego Torres Valencia ”}b = { edad : 28 }

CREAR LA COLECCIONdb.personas.insert(a)db.personas.insert(b)

MongoDB: comando para crear la coleccion

Puebo revisar el estado de:la base de datos: miPrimeraBasedeDatos,Colección: personasy los respectivos campos nombre y edad,Ademas se crea el id único por medio de la MAC delComputador haciendo este índice único en todo el mundo.

MongoDB: Robomongo visualiza la base de datos mongoDB

MongoDB: comando show collections

COMANDO show collectionsshow collections

MongoDB: comando db.personas.find()

COMANDO db.personas.find()Muestra la colección personas con los 2 documentos que hemos creados, y cadadocumento tiene un índice o id único. Nos muestra la colección personas en formato JSON (JavaScript Object Notation).db.personas.find( )

MongoDB: crear una segunda coleccion

CREAR UNA SEGUNDA COLECCIÓN LLAMADA amigosuse.miPrimeraBasedeDatosdb.amigos.insert({ nombre: “Juan ”, teléfono: 31248608 , dirección:”barrio colpet #2-45” } )

MongoDB: mostrar la segunda coleccion

MOSTRAR LA SEGUNDA COLECCIÓN LLAMADA amigosdb.amigos.find()

Puebo revisar el estado de:la base de datos: miPrimeraBasedeDatos,Colección: amigos y personasy los respectivos campos nombre y edad,Ademas se crea el id único por medio de la MAC delComputador haciendo este índice único en todo el mundo.

MongoDB: Robomongo visualiza la base de datos mongoDB

MongoDB: Borrar un campo de un documento

BORRAR UN CAMPO DE UN DOCUMENTO DE UNA

COLECCION LLAMADA personas

db.personas.remove({edad:28})

MongoDB: Actualizar un campo de un documento

ACTUALIZAR UN CAMPO DE UN DOCUMENTO DE UNA COLECCION LLAMADA personasdb.personas.find()db.personas.update( {nombre:”Diego Torres Valencia”} , { nombre:” Don Diego”} )

Puebo revisar el estado de:la base de datos: miPrimeraBasedeDatos,Colección: personasy los respectivos campos nombre y edad,Ademas se revisa que se actualizo el campo nombre de“Diego Torres Valencia” y el campo quedo actualizado: “Don Diego”.

MongoDB: Robomongo visualiza la base de datos mongoDB

MongoDB: Añadir campos a un documento

AÑADIR O ACTUALIZAR UN CAMPO DE UN DOCUMENTO DE UNA COLECCION LLAMADA personasdb.personas.find()db.personas.update( {Nombre:” Don Diego”} , { $set :{ apellido:” Valencia” ,alias:”dieguin”} } )

Puebo revisar el estado de:la base de datos: miPrimeraBasedeDatos,Colección: personasy los respectivos campos nombre y edad,Ademas se visualiza los dos nuevos campos creadosApellido: “Valencia”Alias: “Dieguin”

MongoDB: Robomongo visualiza la base de datos mongoDB

MongoDB:Borrar base de datos creada

BORRAR BASE DE DATOS CREADAUse miPrimeraBasedeDatosdb.dropDatabase()

Borramos la base de datos: miPrimeraBasedeDatos,Ademas se visualiza en Robomongo que se borro la base de datos .

MongoDB: Robomongo visualiza la base de datos mongoDB

MongoDB: ERROR: dbpath<\data\db\> does not exist.

MongoDB: ERROR: dbpath<\data\db\> does not exist.

MongoDB: ERROR: dbpath<\data\db\> does not exist.

BibliografíaFuentes bibliográficas

• PMBOK. (2003) Guía Fundamental para la Gestión de Proyectos. Edición project management Institute, Inc.

• Rodríguez Bermúdez, José Ramón; García Mínguez, Jordi; Lamarca Orozco, Ignacio. (2007): “Gestión de proyectos informáticos: métodos, herramientas y casos”. Editorial UOC, S.L., Madrid. ISBN 8497885686. Libro guía

• Sánchez Garreta, José Salvador. (2003): “Ingeniería de proyectos informáticos: actividades y procedimientos”. Edición ilustrada. Editor Universidad Jaume, Córdoba. ISBN 8480214082, 9788480214087

• Fuentes digitales o electrónicas

• Medellín, (2011, agosto). Dirección de proyectos. Recuperado el 23 de agosto de 2011, del sitio web http://www.slideshare.net/albinogoncalves/direccin-de-proyectos-de-ti-i?src=related_normal&rel=130864

Fin de la presentación.

MUCHAS GRACIAS

Copyright 2014, Todos los Derechos Reservados.