SlideShare una empresa de Scribd logo
MONGODB
Una base de datos… NoSQL



                           Eduard Tomàs
                           eduard.tomas@raona.com
                           www.raona.com
                           @eiximenis
¿PORQUE NOSQL?
• Atomic                       • Basic Availability
• Consistent                   • Soft State
• Isolated                     • Eventual Consistency
• Durable
       • Consistency
       • Availabilty
       • Partition Tolerance
TIPOS DE BBDD NOSQL
•   Key / Value Pairs
•   Column Familiy
•   Documentales
•   ….
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
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
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”
                                    }
¿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
CONCEPTOS DE MONGODB
• Base de Datos
• Colección
• Documento
• Schema free
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[{…},{…},….]})
UPSERTS
• Reemplazar un documento
   • db.coleccion.update()
• Upsert de un documento (creación o reemplazo)
   • db.coleccion.save()
• Modificadores
   • $inc
   • $set / $unset
   • $push / $pull
   • …
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.
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" : "...."
     }]                               }]                               }]
}                                }                                }
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" : "...."
                                }]
                             }
… 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}
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;                                                   }
}
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

Más contenido relacionado

PPTX
MongoDB y bluemix
PPTX
NoSQL, Mongo DB & Google Maps
PPT
Mongo db course introduction
PPTX
React native - t3chfest 2016
PPTX
Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)
PPTX
Modos de transmisión
PPTX
Bd no sql
PPTX
Jean piere sarumo mongodb
MongoDB y bluemix
NoSQL, Mongo DB & Google Maps
Mongo db course introduction
React native - t3chfest 2016
Aplicaciones Metro UI para Windows8 con C# y XAML (12 horas Visual Studio)
Modos de transmisión
Bd no sql
Jean piere sarumo mongodb

Similar a MongoDb (BcnDevCon Nov 2011) (20)

PDF
Introduccion mongodb
PDF
Seminario mongo db springdata 10-11-2011
PDF
Greach 2011 - Engrandeciendo Grails con Mongo DB
PPTX
Bd no sq ldocumento
PPTX
1 tutorial de mongo db
PPTX
GESTION DE CON Mongo DB UNA REVISON GENERAL
PPTX
Ultisgbd
PDF
Nosqlcp
PDF
Nosqlcp
PDF
NoSQL, MongoDB y MongoMapper
PPTX
NoSQL - MongoDB
PDF
Mandango al descubierto
PPTX
PPTX
Mongo db
PPTX
PPT
DB relacionales vs DB documentales
PPTX
2016-10-mongodb-v1-1610311318504545.pptx
PDF
Introduccion mongodb
Seminario mongo db springdata 10-11-2011
Greach 2011 - Engrandeciendo Grails con Mongo DB
Bd no sq ldocumento
1 tutorial de mongo db
GESTION DE CON Mongo DB UNA REVISON GENERAL
Ultisgbd
Nosqlcp
Nosqlcp
NoSQL, MongoDB y MongoMapper
NoSQL - MongoDB
Mandango al descubierto
Mongo db
DB relacionales vs DB documentales
2016-10-mongodb-v1-1610311318504545.pptx
Publicidad

Más de Eduard Tomàs (20)

PPTX
Kubernetes: Do's, don'ts and why's
PPTX
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
PPTX
Escalando workloads serverless en Kubernetes con Keda
PPTX
C#9 - Más C# que nunca
PPTX
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
PPTX
Keda o como convertir Kubernetess en Serverless
PPTX
.NET Memoria y Rendimiento
PPTX
Containers en .NET (Dot Net 2018 - Spain)
PPTX
Esos contenedores, ¡a producción! (Commit Conf 2018)
PPTX
Codemotion 2015 - Bienvenido de nuevo c++
PPTX
El "peor" lenguaje del mundo
PPTX
Containerize a netcore application with aks
PPTX
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
PPTX
Aplicaciones de consola fáciles? Más quisieramos
PPTX
Serverless with Azure Functions and CosmosDb
PPTX
Docker y todo eso... más o menos
PPTX
Microservices: Yes or not?
PPTX
ASP.NET MVC Core
PPTX
Azure functions
PPTX
React native - Unleash the power of your device
Kubernetes: Do's, don'ts and why's
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
Escalando workloads serverless en Kubernetes con Keda
C#9 - Más C# que nunca
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
Keda o como convertir Kubernetess en Serverless
.NET Memoria y Rendimiento
Containers en .NET (Dot Net 2018 - Spain)
Esos contenedores, ¡a producción! (Commit Conf 2018)
Codemotion 2015 - Bienvenido de nuevo c++
El "peor" lenguaje del mundo
Containerize a netcore application with aks
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Aplicaciones de consola fáciles? Más quisieramos
Serverless with Azure Functions and CosmosDb
Docker y todo eso... más o menos
Microservices: Yes or not?
ASP.NET MVC Core
Azure functions
React native - Unleash the power of your device
Publicidad

Último (20)

PPTX
Yogurt de tocosh (1).pptx preparacion receta
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
Estrategia de apoyo tecnología grado 9-3
PPTX
Introduccion a servidores de Aplicaciones (1).pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PDF
La electricidad y la electrónica .pdf n
PPTX
Presentación de Redes de Datos modelo osi
PDF
SAP Transportation Management para LSP, TM140 Col18
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
taller de informática - LEY DE OHM
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
Maste clas de estructura metálica y arquitectura
DOCX
Las nuevas tecnologías en la salud - enfermería técnica.
PDF
Calidad desde el Docente y la mejora continua .pdf
Yogurt de tocosh (1).pptx preparacion receta
historia_web de la creacion de un navegador_presentacion.pptx
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Presentación PASANTIAS AuditorioOO..pptx
REDES INFORMATICAS REDES INFORMATICAS.pptx
Plantilla para Diseño de Narrativas Transmedia.pdf
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Zarate Quispe Alex aldayir aplicaciones de internet .docx
Estrategia de apoyo tecnología grado 9-3
Introduccion a servidores de Aplicaciones (1).pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
La electricidad y la electrónica .pdf n
Presentación de Redes de Datos modelo osi
SAP Transportation Management para LSP, TM140 Col18
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
taller de informática - LEY DE OHM
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Maste clas de estructura metálica y arquitectura
Las nuevas tecnologías en la salud - enfermería técnica.
Calidad desde el Docente y la mejora continua .pdf

MongoDb (BcnDevCon Nov 2011)

  • 1. MONGODB Una base de datos… NoSQL Eduard Tomàs eduard.tomas@raona.com www.raona.com @eiximenis
  • 2. ¿PORQUE NOSQL? • Atomic • Basic Availability • Consistent • Soft State • Isolated • Eventual Consistency • Durable • Consistency • Availabilty • Partition Tolerance
  • 3. TIPOS DE BBDD NOSQL • Key / Value Pairs • Column Familiy • Documentales • ….
  • 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. 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. 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. ¿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. CONCEPTOS DE MONGODB • Base de Datos • Colección • Documento • Schema free
  • 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. 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. 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. 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. 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. … 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. 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. 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