SlideShare una empresa de Scribd logo
1 de 15
Mallorca #MongoDB User Group
http://www.meetup.com/Mallorca-MongoDB-User-Group/
MapReduce y Aggregation Framework
@emiliotorrens | www.emiliotorrens.com
Agenda MapReduce:
Que es MapReduce?
Como funciona en MongoDB?
Ejemplo
Aggregation Framework:
Que es Aggregation Framework?
Como funciona?
Ejemplo
Ejemplo en el mundo real:
Análisis de web logs
Que es MapReduce?
MapReduce es un Framework creado por Google para dar solución a la computación paralela sobre grandes
colecciones de datos en sistemas distribuidos.
Se basa en una estructura de procesos que mapean, y procesos que reducen, los primeros agrupan los datos en
forma de pares key/value, y los segundos los procesan.
Básicamente, MapReduce transforma una lista de pares key/value en una lista de valores.
Como funciona en MongoDB?
En MongoDB el método de MapReduce recibe las funciones de Map, Reduce y además se le pasa un hash de
Opciones donde le podemos indicar la salida, la función de finalize, los filtros etc.
MAP: función que realizará el mapeo
REDUCE: función que realizará la reducción
FINALIZE: función para tratar datos tras el proceso
OUT: Que salida queremos darle a los datos
MAP
La funciona map se ejecutara una vez por cada conjunto de Documentos que cumpla con la key, en este caso el
nombre del servidor y la hora, con emit generamos un documento con la key y los valores que queremos agregar:
function Map() {
var day = new Date(this.datetime.getFullYear(),
this.datetime.getMonth(),
this.datetime.getDate(),
this.datetime.getHours());
emit({day : day, servername: this.servername}, {count: 1});
}
MAP
Podemos incluir funciones de JavaScript dentro de las funciones que enviamos a MongoDB para tratar los datos:
function Map() {
function trim(str){
return str.replace(/^ss*/, '').replace(/ss*$/, '')
}
var day = new Date(this.datetime.getFullYear(),
this.datetime.getMonth(),
this.datetime.getDate(),
this.datetime.getHours());
emit({day : day, servername: trim(this.servername)}, {count: 1});
}
REDUCE
La función reduce se ejecutara para todos los conjuntos de Documentos que aparezcan mas de una vez, aquí es
donde contaremos, sumaremos, etc., en key recibiremos la key que generamos anteriormente en el emit, y en
values los valores:
function Reduce(key, arr_values) {
var result = {count: 0};
for(var i in arr_values) {
result.count += arr_values[i].count;
}
return result;
}
SALIDA
MongoDB nos da varias posibilidades de salida de los resultados:
• replace: Si no exista la colección la crea, si existe elimina todos los datos y mete los nuevos
• merge: Si la key no existe la inserta, si existe la reemplaza por la nueva
• reduce: Hace reduce sobre los datos de la colección, actualizando existentes y creando nuevos
• inline: Devuelve los datos directamente, sin guardarlos en una colección.
EJEMPLO
Ejecutamos MapReduce pasándole las funciones de map, reduce, los filtros y la opción de salida:
db.web_logs.mapReduce(map,
reduce,
{
out: { reduce: "web_logs_reduced" },
query: { datetime: { $lt: new Date('04/12/2012') } }
}
)
Que es Aggregation Framework?
MongoDB Aggregation Framework proporciona un método para calcular valores agregados sin tener que usar
MapReduce.
Aggregation Framework proporciona una funcionalidad similar a GROUP BY y operadores relacionados con SQL.
Además, proporciona capacidades de proyección para formar de nuevo los datos devueltos utilizando las
proyecciones en el Aggregation Framework, puedes agregar campos calculados, crear nuevos sub-objetos virtuales,
y extraer los sub-campos en el nivel superior de los resultados.
Como funciona Aggregation Framework?
El método de agregación recibe un array de comandos los cuales ira ejecutando en el lado del servidor y al terminar
nos devolverá los resultados.
Operadores:
• $project: Incluye los campos del documento original, insertar campos calculados, cambio de nombre de los
campos, crear y rellenar campos que contienen sub-documentos.
• $match: Filtra los documentos sobre los que se ejecutaran los siguientes comandos, la sintaxis es la misma que
para los Query.
• $limit: Limita el numero de documentos.
• $skip: Salta el numero indicado de documentos.
• $unwind: Aplicable solo a campos array, devuelve un documento para cada miembro del array en cada
documento de origen.
• $group: el group by.
• $sort: ordena los resultados.
Ejemplo
db.web_logs.aggregate(
{'$group': {
'_id': {'installation':‘$installation', 'service':'$service'},
'total': { '$sum': 1 } ,
'average': { '$avg': '$time_taken' },
'origins': {'$addToSet': '$origin'}
}
}
,{'$match': { 'total': {'$gt': 10000} }}
,{'$project': {'source':'$origins', '_id':0, 'key':'$_id', 'count':'$total', 'average':1}}
,{'$sort':{'total':-1}}
,{'$unwind' : '$source'}
,{'$limit':10}
)
MapReduce y Aggregation Framework en el
Mundo Real: Análisis de web logs
Escenario:
Desde una serie de servidores se parsean los logs de las peticiones web y se envían a una base de datos de
MongoDB para análisis estadístico.
Esta colección crece en +/- 6 millones de documentos al día, difícil de gestionar y difícil de consultar por la cantidad
de datos, además es difícil de mantener por el excesivo espacio que ocupan esos datos.
Solución:
Cada hora se vacía la colección de web_logs reduciendo los datos a la información estadística necesaria con
MapReduce, esta reducción se hace sobre una colección que se particiona horizontalmente por meses.
Estas nuevas colecciones se consultan con Aggregation Framework por lo que se pueden hacer operaciones de
agregación sobre los datos ya reducidos.
Demo y un poco de Código:

Próximos Meetups
• MongoDB y .NET
• Objects Mappings para MongoDB
• MongoDB y Ruby on Rails
Mallorca #MongoDB User Group
http://www.meetup.com/Mallorca-MongoDB-User-Group/
Gracias por venir ;)
@emiliotorrens | www.emiliotorrens.com

Más contenido relacionado

La actualidad más candente

La actualidad más candente (10)

Nuevas características de los objetos en JavaScript ES6
Nuevas características de los objetos en JavaScript ES6Nuevas características de los objetos en JavaScript ES6
Nuevas características de los objetos en JavaScript ES6
 
Trabajo array
Trabajo arrayTrabajo array
Trabajo array
 
Informe chabot
Informe chabotInforme chabot
Informe chabot
 
Sumaoctal
SumaoctalSumaoctal
Sumaoctal
 
Create database reservacodigos
Create database reservacodigosCreate database reservacodigos
Create database reservacodigos
 
Tarea 2 y_3
Tarea 2 y_3Tarea 2 y_3
Tarea 2 y_3
 
Análisis espacial con R (asignatura de Master - UPM)
Análisis espacial con R (asignatura de Master - UPM)Análisis espacial con R (asignatura de Master - UPM)
Análisis espacial con R (asignatura de Master - UPM)
 
Funcion cuadratica
Funcion cuadraticaFuncion cuadratica
Funcion cuadratica
 
Programa que suma y multiplica
Programa que suma y multiplicaPrograma que suma y multiplica
Programa que suma y multiplica
 
(4) Curso sobre el software estadístico R: La librería maptools
(4) Curso sobre el software estadístico R: La librería maptools(4) Curso sobre el software estadístico R: La librería maptools
(4) Curso sobre el software estadístico R: La librería maptools
 

Destacado

Map reduce (from Google)
Map reduce (from Google)Map reduce (from Google)
Map reduce (from Google)Sri Prasanna
 
Big table
Big tableBig table
Big tablePSIT
 
Hadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosHadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosRaul Ochoa
 
Herramientas y ejemplos de trabajos MapReduce con Apache Hadoop
Herramientas y ejemplos de trabajos MapReduce con Apache HadoopHerramientas y ejemplos de trabajos MapReduce con Apache Hadoop
Herramientas y ejemplos de trabajos MapReduce con Apache HadoopDavid Albela Pérez
 
Agrupamiento Kmeans
Agrupamiento KmeansAgrupamiento Kmeans
Agrupamiento KmeansOmar Sanchez
 
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革CLOUDIAN KK
 
Filesystem Comparison: NFS vs GFS2 vs OCFS2
Filesystem Comparison: NFS vs GFS2 vs OCFS2Filesystem Comparison: NFS vs GFS2 vs OCFS2
Filesystem Comparison: NFS vs GFS2 vs OCFS2Giuseppe Paterno'
 
Summary of "Google's Big Table" at nosql summer reading in Tokyo
Summary of "Google's Big Table" at nosql summer reading in TokyoSummary of "Google's Big Table" at nosql summer reading in Tokyo
Summary of "Google's Big Table" at nosql summer reading in TokyoCLOUDIAN KK
 
Estilpos de aprendizaje
Estilpos de aprendizajeEstilpos de aprendizaje
Estilpos de aprendizajefelipehuejutla
 
Temadeinvestigacion 130402203353-phpapp02
Temadeinvestigacion 130402203353-phpapp02Temadeinvestigacion 130402203353-phpapp02
Temadeinvestigacion 130402203353-phpapp02Camilo López
 
Aprendizaje de Maquina y Aplicaciones
Aprendizaje de Maquina y AplicacionesAprendizaje de Maquina y Aplicaciones
Aprendizaje de Maquina y AplicacionesEdgar Marca
 

Destacado (20)

Map reduce (from Google)
Map reduce (from Google)Map reduce (from Google)
Map reduce (from Google)
 
MapReduce en Hadoop
MapReduce en HadoopMapReduce en Hadoop
MapReduce en Hadoop
 
HDFS
HDFSHDFS
HDFS
 
The google MapReduce
The google MapReduceThe google MapReduce
The google MapReduce
 
Introducción a Hadoop
Introducción a HadoopIntroducción a Hadoop
Introducción a Hadoop
 
Aula virtual apache_hadoop_v3 1
Aula virtual apache_hadoop_v3 1Aula virtual apache_hadoop_v3 1
Aula virtual apache_hadoop_v3 1
 
Big table
Big tableBig table
Big table
 
Casos big data
Casos big dataCasos big data
Casos big data
 
Hadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosHadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datos
 
Hadoop: tecnologias relacionadas
Hadoop: tecnologias relacionadasHadoop: tecnologias relacionadas
Hadoop: tecnologias relacionadas
 
Herramientas y ejemplos de trabajos MapReduce con Apache Hadoop
Herramientas y ejemplos de trabajos MapReduce con Apache HadoopHerramientas y ejemplos de trabajos MapReduce con Apache Hadoop
Herramientas y ejemplos de trabajos MapReduce con Apache Hadoop
 
BigData y MapReduce
BigData y MapReduceBigData y MapReduce
BigData y MapReduce
 
Agrupamiento Kmeans
Agrupamiento KmeansAgrupamiento Kmeans
Agrupamiento Kmeans
 
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
IoT/ビッグデータ/AI連携により次世代ストレージが促進するビジネス変革
 
Filesystem Comparison: NFS vs GFS2 vs OCFS2
Filesystem Comparison: NFS vs GFS2 vs OCFS2Filesystem Comparison: NFS vs GFS2 vs OCFS2
Filesystem Comparison: NFS vs GFS2 vs OCFS2
 
Summary of "Google's Big Table" at nosql summer reading in Tokyo
Summary of "Google's Big Table" at nosql summer reading in TokyoSummary of "Google's Big Table" at nosql summer reading in Tokyo
Summary of "Google's Big Table" at nosql summer reading in Tokyo
 
Estilpos de aprendizaje
Estilpos de aprendizajeEstilpos de aprendizaje
Estilpos de aprendizaje
 
Temadeinvestigacion 130402203353-phpapp02
Temadeinvestigacion 130402203353-phpapp02Temadeinvestigacion 130402203353-phpapp02
Temadeinvestigacion 130402203353-phpapp02
 
Aprendizaje de Maquina y Aplicaciones
Aprendizaje de Maquina y AplicacionesAprendizaje de Maquina y Aplicaciones
Aprendizaje de Maquina y Aplicaciones
 
Cloud Computing y MapReduce
Cloud Computing y MapReduceCloud Computing y MapReduce
Cloud Computing y MapReduce
 

Similar a Mallorca MUG: MapReduce y Aggregation Framework

Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDBAlejandro Mancilla
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryJavier P.
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryJavier P.
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryJavier P.
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básicocamposer
 
Procesamiento masivo de datos en MongoDB
Procesamiento masivo de datos en MongoDBProcesamiento masivo de datos en MongoDB
Procesamiento masivo de datos en MongoDBStratio
 
Servicio web java php perl google
Servicio web  java php perl googleServicio web  java php perl google
Servicio web java php perl googleSeveredDRA
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladoresPedro Cambra
 
1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db.. ..
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005oswchavez
 
Mallorca MUG: MongoDB y .NET
Mallorca MUG: MongoDB y .NETMallorca MUG: MongoDB y .NET
Mallorca MUG: MongoDB y .NETEmilio Torrens
 

Similar a Mallorca MUG: MapReduce y Aggregation Framework (20)

Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Introducción a Mongo.pptx
Introducción a Mongo.pptxIntroducción a Mongo.pptx
Introducción a Mongo.pptx
 
Semana 3 MONGODB conceptos básicos NOSQL
Semana 3   MONGODB conceptos básicos NOSQLSemana 3   MONGODB conceptos básicos NOSQL
Semana 3 MONGODB conceptos básicos NOSQL
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básico
 
Procesamiento masivo de datos en MongoDB
Procesamiento masivo de datos en MongoDBProcesamiento masivo de datos en MongoDB
Procesamiento masivo de datos en MongoDB
 
MapReduce
MapReduceMapReduce
MapReduce
 
mapreduce.pptx
mapreduce.pptxmapreduce.pptx
mapreduce.pptx
 
Servicio web java php perl google
Servicio web  java php perl googleServicio web  java php perl google
Servicio web java php perl google
 
PROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOSPROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOS
 
Django y Python para todos
Django y Python para todosDjango y Python para todos
Django y Python para todos
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005
 
Mallorca MUG: MongoDB y .NET
Mallorca MUG: MongoDB y .NETMallorca MUG: MongoDB y .NET
Mallorca MUG: MongoDB y .NET
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 

Último (11)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Mallorca MUG: MapReduce y Aggregation Framework

  • 1. Mallorca #MongoDB User Group http://www.meetup.com/Mallorca-MongoDB-User-Group/ MapReduce y Aggregation Framework @emiliotorrens | www.emiliotorrens.com
  • 2. Agenda MapReduce: Que es MapReduce? Como funciona en MongoDB? Ejemplo Aggregation Framework: Que es Aggregation Framework? Como funciona? Ejemplo Ejemplo en el mundo real: Análisis de web logs
  • 3. Que es MapReduce? MapReduce es un Framework creado por Google para dar solución a la computación paralela sobre grandes colecciones de datos en sistemas distribuidos. Se basa en una estructura de procesos que mapean, y procesos que reducen, los primeros agrupan los datos en forma de pares key/value, y los segundos los procesan. Básicamente, MapReduce transforma una lista de pares key/value en una lista de valores.
  • 4. Como funciona en MongoDB? En MongoDB el método de MapReduce recibe las funciones de Map, Reduce y además se le pasa un hash de Opciones donde le podemos indicar la salida, la función de finalize, los filtros etc. MAP: función que realizará el mapeo REDUCE: función que realizará la reducción FINALIZE: función para tratar datos tras el proceso OUT: Que salida queremos darle a los datos
  • 5. MAP La funciona map se ejecutara una vez por cada conjunto de Documentos que cumpla con la key, en este caso el nombre del servidor y la hora, con emit generamos un documento con la key y los valores que queremos agregar: function Map() { var day = new Date(this.datetime.getFullYear(), this.datetime.getMonth(), this.datetime.getDate(), this.datetime.getHours()); emit({day : day, servername: this.servername}, {count: 1}); }
  • 6. MAP Podemos incluir funciones de JavaScript dentro de las funciones que enviamos a MongoDB para tratar los datos: function Map() { function trim(str){ return str.replace(/^ss*/, '').replace(/ss*$/, '') } var day = new Date(this.datetime.getFullYear(), this.datetime.getMonth(), this.datetime.getDate(), this.datetime.getHours()); emit({day : day, servername: trim(this.servername)}, {count: 1}); }
  • 7. REDUCE La función reduce se ejecutara para todos los conjuntos de Documentos que aparezcan mas de una vez, aquí es donde contaremos, sumaremos, etc., en key recibiremos la key que generamos anteriormente en el emit, y en values los valores: function Reduce(key, arr_values) { var result = {count: 0}; for(var i in arr_values) { result.count += arr_values[i].count; } return result; }
  • 8. SALIDA MongoDB nos da varias posibilidades de salida de los resultados: • replace: Si no exista la colección la crea, si existe elimina todos los datos y mete los nuevos • merge: Si la key no existe la inserta, si existe la reemplaza por la nueva • reduce: Hace reduce sobre los datos de la colección, actualizando existentes y creando nuevos • inline: Devuelve los datos directamente, sin guardarlos en una colección.
  • 9. EJEMPLO Ejecutamos MapReduce pasándole las funciones de map, reduce, los filtros y la opción de salida: db.web_logs.mapReduce(map, reduce, { out: { reduce: "web_logs_reduced" }, query: { datetime: { $lt: new Date('04/12/2012') } } } )
  • 10. Que es Aggregation Framework? MongoDB Aggregation Framework proporciona un método para calcular valores agregados sin tener que usar MapReduce. Aggregation Framework proporciona una funcionalidad similar a GROUP BY y operadores relacionados con SQL. Además, proporciona capacidades de proyección para formar de nuevo los datos devueltos utilizando las proyecciones en el Aggregation Framework, puedes agregar campos calculados, crear nuevos sub-objetos virtuales, y extraer los sub-campos en el nivel superior de los resultados.
  • 11. Como funciona Aggregation Framework? El método de agregación recibe un array de comandos los cuales ira ejecutando en el lado del servidor y al terminar nos devolverá los resultados. Operadores: • $project: Incluye los campos del documento original, insertar campos calculados, cambio de nombre de los campos, crear y rellenar campos que contienen sub-documentos. • $match: Filtra los documentos sobre los que se ejecutaran los siguientes comandos, la sintaxis es la misma que para los Query. • $limit: Limita el numero de documentos. • $skip: Salta el numero indicado de documentos. • $unwind: Aplicable solo a campos array, devuelve un documento para cada miembro del array en cada documento de origen. • $group: el group by. • $sort: ordena los resultados.
  • 12. Ejemplo db.web_logs.aggregate( {'$group': { '_id': {'installation':‘$installation', 'service':'$service'}, 'total': { '$sum': 1 } , 'average': { '$avg': '$time_taken' }, 'origins': {'$addToSet': '$origin'} } } ,{'$match': { 'total': {'$gt': 10000} }} ,{'$project': {'source':'$origins', '_id':0, 'key':'$_id', 'count':'$total', 'average':1}} ,{'$sort':{'total':-1}} ,{'$unwind' : '$source'} ,{'$limit':10} )
  • 13. MapReduce y Aggregation Framework en el Mundo Real: Análisis de web logs Escenario: Desde una serie de servidores se parsean los logs de las peticiones web y se envían a una base de datos de MongoDB para análisis estadístico. Esta colección crece en +/- 6 millones de documentos al día, difícil de gestionar y difícil de consultar por la cantidad de datos, además es difícil de mantener por el excesivo espacio que ocupan esos datos. Solución: Cada hora se vacía la colección de web_logs reduciendo los datos a la información estadística necesaria con MapReduce, esta reducción se hace sobre una colección que se particiona horizontalmente por meses. Estas nuevas colecciones se consultan con Aggregation Framework por lo que se pueden hacer operaciones de agregación sobre los datos ya reducidos. Demo y un poco de Código: 
  • 14. Próximos Meetups • MongoDB y .NET • Objects Mappings para MongoDB • MongoDB y Ruby on Rails
  • 15. Mallorca #MongoDB User Group http://www.meetup.com/Mallorca-MongoDB-User-Group/ Gracias por venir ;) @emiliotorrens | www.emiliotorrens.com