MongoDb (BcnDevCon Nov 2011)

1,012 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,012
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

MongoDb (BcnDevCon Nov 2011)

  1. 1. MONGODBUna base de datos… NoSQL Eduard Tomàs eduard.tomas@raona.com www.raona.com @eiximenis
  2. 2. ¿PORQUE NOSQL?• Atomic • Basic Availability• Consistent • Soft State• Isolated • Eventual Consistency• Durable • Consistency • Availabilty • Partition Tolerance
  3. 3. TIPOS DE BBDD NOSQL• Key / Value Pairs• Column Familiy• Documentales• ….
  4. 4. 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 0001010110010101100010100001010001000010010 /users/1020 00010101010000000010111110101010101111 00011001100101011000101000010101101010010000 /users/1021 01101010100000000101111101110010101110 0101010101000101010101001010010100010010010 /fras/2011/1WE1 000100100100100000010100110111110
  5. 5. COLUMN FAMILY Clave BcnDevCon Columnas Lugar Barcelona Inicio 17 / 11 / 2011 Fin 19 / 11 / 2011 Clave Salón del Manga Ferias Columnas Lugar Barcelona Inicio 12 / 09 / 2011 Visitantes 21428 Artista invitado Kurosawa
  6. 6. 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”, “nombre” : “Joan”, “Twitter”:”Eiximenis”, “Empresa”:”raona”, “Ciudad”:”Igualada” “Ciudad”:”Bcn”, } “Edad” : “29” }
  7. 7. ¿POR QUÉ MONGODB?• Alto rendimiento• Disponible en Windows, Unix, Mac,…• La razón principal: • .NET C# • Haskell • Erlang • Perl • C / C++ • Python • Java • Coldfusion • PHP • … • Ruby
  8. 8. CONCEPTOS DE MONGODB• Base de Datos• Colección• Documento• Schema free
  9. 9. 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[{…},{…},….]})
  10. 10. UPSERTS• Reemplazar un documento • db.coleccion.update()• Upsert de un documento (creación o reemplazo) • db.coleccion.save()• Modificadores • $inc • $set / $unset • $push / $pull • …
  11. 11. 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.
  12. 12. MAP…{ { { "_id" : "1", "_id" : “2", "_id" : “3", "BlogId" : "b1", "BlogId" : "b2", "BlogId" : "b2", "Titulo" : "foo", "Titulo" : “bar", "Titulo" : “bar", "Comentarios" : [ "Comentarios" : [ "Comentarios" : [ { { { "Autor" : "eiximenis", "Autor" : “pisukeman", "Autor" : “bandolero", "Texto" : "...." "Texto" : "...." "Texto" : "...." }, }, }, { { { "Autor" : "eiximenis", "Autor" : "eiximenis", "Autor" : “pisukeman", "Texto" : "...." "Texto" : "...." "Texto" : "...." }] }] }]} } }
  13. 13. MAP…{ {“BlogId” : “b1”, "_id"{ : "1", “NumComentarios” : 2} "BlogId" : "b1", "_id" : “2", "Titulo" : "foo", : "b2", { "BlogId" "Comentarios" : [ "_id" : “3", "Titulo" : “bar", { "BlogId" : "b2", "Comentarios" : [ "Autor" : "eiximenis","Titulo" : “bar", {“BlogId” : “b1”, { "Comentarios" : [ "Texto" : "...." : “pisukeman", “NumComentarios” :1} "Autor" }, { "Texto" : "...." { "Autor" : “bandolero", }] "Autor" : "eiximenis", "Texto" : "...." } {“BlogId” : “b2”, "Texto" : "...." }, “NumComentarios” :2} }] {} "Autor" : “pisukeman", "Texto" : "...." }] }
  14. 14. … REDUCE {“BlogId” : “b1”,{“BlogId” : “b1”, “NumComentarios” : 3}“NumComentarios” : 2}{“BlogId” : “b1”, {“BlogId” : “b1”,“NumComentarios” :1} {“BlogId” : “b2”, “NumComentarios” : 12}{“BlogId” : “b2”, “NumComentarios” : 2}“NumComentarios” :2} {“BlogId” : “b1”, {“BlogId” : “b2”, “NumComentarios” :7} {“BlogId” : “b1”, “NumComentarios” : 2}{“BlogId” : “b2”, “NumComentarios” : 9}“NumComentarios” : 0}{“BlogId” : “b1”, {“BlogId” : “b2”,“NumComentarios” :2} “NumComentarios” : 0}
  15. 15. MAP / REDUCE EN MONGODB {“_id” : “b1”,• 2 funciones (map y reduce) escritas en javascript [• Ejecutadas en el servidor {“numcoments” : 2}, {“numcoments: 4}function() { ]} emit(this.BlogId, {numcoments : this.Comentarios.length});}function(key, values) { var ret = {numcoments : 0}; {“_id” : “b1”, values.forEach(function(value) { “value” { ret.numcoments +=value.numcoments; “numcoments” : 6 }); } return ret; }}
  16. 16. 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

×