mongodb (bcndevcon nov 2011)

16

Click here to load reader

Upload: eduard-tomas

Post on 13-Jun-2015

807 views

Category:

Technology


0 download

DESCRIPTION

Una pequeña explicación de que son las BBDD NoSq y en particular MongoDb y como funciona.Presentación usada en mi charla de la BcnDevCon 2011.

TRANSCRIPT

Page 1: MongoDb (BcnDevCon Nov 2011)

Una base de datos… NoSQL

MONGODB

Eduard Tomà[email protected]@eiximenis

Page 2: MongoDb (BcnDevCon Nov 2011)

¿PORQUE NOSQL?

• Atomic

• Consistent

• Isolated

• Durable

• Basic Availability

• Soft State

• Eventual Consistency

• Consistency

• Availabilty

• Partition Tolerance

Page 3: MongoDb (BcnDevCon Nov 2011)

TIPOS DE BBDD NOSQL• Key / Value Pairs

• Column Familiy

• Documentales

• ….

Page 4: MongoDb (BcnDevCon Nov 2011)

KEY / VALUE PAIRS STORES

• Los datos se almacenan en pares (clave, valor) donde clave es usualmente una cadena y el valor un blob

• Consultas: Solo por clave

/users/1020 000101011001010110001010000101000100001001000010101010000000010111110101010101111

/users/1021 0001100110010101100010100001010110101001000001101010100000000101111101110010101110

/fras/2011/1WE1 0101010101000101010101001010010100010010010000100100100100000010100110111110

Page 5: MongoDb (BcnDevCon Nov 2011)

COLUMN FAMILY

Clave BcnDevCon

Columnas Lugar Barcelona

Inicio 17 / 11 / 2011

Fin 19 / 11 / 2011

Clave Salón del Manga

Columnas Lugar Barcelona

Inicio 12 / 09 / 2011

Visitantes 21428

Artista invitado Kurosawa

Ferias

Page 6: MongoDb (BcnDevCon Nov 2011)

DE DOCUMENTOS

• Pueden verse como una key / value pair store donde el valor está en algún formato conocido (json, bson, xml,…)

• A diferencia de los anteriores al conocer el formato de los datos pueden realizarse operaciones en estos

{“nombre” : “Edu”,“Twitter”:”Eiximenis”,“Ciudad”:”Igualada”}

{“nombre” : “Joan”,“Empresa”:”raona”,“Ciudad”:”Bcn”,“Edad” : “29”}

Page 7: MongoDb (BcnDevCon Nov 2011)

¿POR QUÉ MONGODB?

• Alto rendimiento

• Disponible en Windows, Unix, Mac,…

• La razón principal:

• .NET C#

• Erlang

• C / C++

• Java

• PHP

• Ruby

• Haskell

• Perl

• Python

• Coldfusion

• …

Page 8: MongoDb (BcnDevCon Nov 2011)

CONCEPTOS DE MONGODB

• Base de Datos

• Colección

• Documento

• Schema free

Page 9: MongoDb (BcnDevCon Nov 2011)

OPERACIONES BÁSICAS DE MONGODB• Conectar con una base de datos

• use BaseDeDatos

• Insertar un documento

• db.coleccion.insert({…})

• Encontrar uno o más documentos

• db.coleccion.find({…})

• Ordenar

• db.coleccion.find().sort({…})

• Metaoperadores ($or, $and,$gt)

• db.coleccion.find({$or[{…},{…},….]})

Page 10: MongoDb (BcnDevCon Nov 2011)

UPSERTS

• Reemplazar un documento

• db.coleccion.update()

• Upsert de un documento (creación o reemplazo)

• db.coleccion.save()

• Modificadores

• $inc

• $set / $unset

• $push / $pull

• …

Page 11: MongoDb (BcnDevCon Nov 2011)

MAP AND REDUCE

• Operación “equivalente” al GROUP BY de BBDD relacionales

• Posible de calcular en paralelo

• Posible de calcular con datos distribuídos entre distintas máquinas

• Se compone de dos pasos

• Map -> De una colección recoge y transforma los datos en el formato necesario para Reduce.

• Reduce -> Opera sobre los datos generados por Map efectuando los cálculos necesarios.

Page 12: MongoDb (BcnDevCon Nov 2011)

MAP…

{ "_id" : "1", "BlogId" : "b1", "Titulo" : "foo", "Comentarios" : [ { "Autor" : "eiximenis", "Texto" : "...." }, { "Autor" : "eiximenis", "Texto" : "...." } ]}

{ "_id" : “2", "BlogId" : "b2", "Titulo" : “bar", "Comentarios" : [ { "Autor" : “pisukeman", "Texto" : "...." }, { "Autor" : "eiximenis", "Texto" : "...." } ]}

{ "_id" : “3", "BlogId" : "b2", "Titulo" : “bar", "Comentarios" : [ { "Autor" : “bandolero", "Texto" : "...." }, { "Autor" : “pisukeman", "Texto" : "...." } ]}

Page 13: MongoDb (BcnDevCon Nov 2011)

MAP…{ "_id" : "1", "BlogId" : "b1", "Titulo" : "foo", "Comentarios" : [ { "Autor" : "eiximenis", "Texto" : "...." }, { "Autor" : "eiximenis", "Texto" : "...." } ]}

{ "_id" : “2", "BlogId" : "b2", "Titulo" : “bar", "Comentarios" : [ { "Autor" : “pisukeman", "Texto" : "...." }]}

{ "_id" : “3", "BlogId" : "b2", "Titulo" : “bar", "Comentarios" : [ { "Autor" : “bandolero", "Texto" : "...." }, { "Autor" : “pisukeman", "Texto" : "...." } ]}

{“BlogId” : “b1”,“NumComentarios” : 2}

{“BlogId” : “b1”,“NumComentarios” :1}

{“BlogId” : “b2”,“NumComentarios” :2}

Page 14: MongoDb (BcnDevCon Nov 2011)

… REDUCE{“BlogId” : “b1”,“NumComentarios” : 2}

{“BlogId” : “b1”,“NumComentarios” :1}{“BlogId” : “b2”,“NumComentarios” :2}{“BlogId” : “b1”,“NumComentarios” :7}

{“BlogId” : “b2”,“NumComentarios” : 0}

{“BlogId” : “b1”,“NumComentarios” :2}

{“BlogId” : “b1”,“NumComentarios” : 3}

{“BlogId” : “b2”,“NumComentarios” : 2}

{“BlogId” : “b1”,“NumComentarios” : 9}

{“BlogId” : “b2”,“NumComentarios” : 0}

{“BlogId” : “b1”,“NumComentarios” : 12}

{“BlogId” : “b2”,“NumComentarios” : 2}

Page 15: MongoDb (BcnDevCon Nov 2011)

MAP / REDUCE EN MONGODB• 2 funciones (map y reduce) escritas en javascript

• Ejecutadas en el servidor

function() { emit(this.BlogId, {numcoments : this.Comentarios.length});}

function(key, values) { var ret = {numcoments : 0}; values.forEach(function(value) { ret.numcoments +=value.numcoments; }); return ret;}

{“_id” : “b1”,[{“numcoments” : 2},{“numcoments: 4}]}

{“_id” : “b1”, “value” { “numcoments” : 6 }}

Page 16: MongoDb (BcnDevCon Nov 2011)

REPLICA SETS

• Redundancia de datos

• Tolerancia a fallos

• Un primario, varios secundarios

• Escrituras: Solo a/desde el primario

• Lecturas: Solo desde el primario o bien desde cualquier nodo

• Si el primario cae, un secundario toma su rol de forma automática