SlideShare a Scribd company logo
1 of 16
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

More Related Content

Similar to MongoDb (BcnDevCon Nov 2011)

ElasticSearch: la tenés atroden Google
ElasticSearch: la tenés atroden GoogleElasticSearch: la tenés atroden Google
ElasticSearch: la tenés atroden Google
Mariano Iglesias
 

Similar to MongoDb (BcnDevCon Nov 2011) (15)

ElasticSearch: la tenés atroden Google
ElasticSearch: la tenés atroden GoogleElasticSearch: la tenés atroden Google
ElasticSearch: la tenés atroden Google
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
 
NoSQL, MongoDB y MongoMapper
NoSQL, MongoDB y MongoMapperNoSQL, MongoDB y MongoMapper
NoSQL, MongoDB y MongoMapper
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DB
 
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
 
Mongo Mapper
Mongo MapperMongo Mapper
Mongo Mapper
 
Dynamics saturday madrid 2019 tips & tricks para desarrollo en bc con v...
Dynamics saturday madrid 2019   tips & tricks para desarrollo en bc con v...Dynamics saturday madrid 2019   tips & tricks para desarrollo en bc con v...
Dynamics saturday madrid 2019 tips & tricks para desarrollo en bc con v...
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de Persistencia
 
Html
HtmlHtml
Html
 
Introducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBIntroducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDB
 
NoSQL - MongoDB
NoSQL - MongoDBNoSQL - MongoDB
NoSQL - MongoDB
 
Seminario mongo db springdata 10-11-2011
Seminario mongo db springdata 10-11-2011Seminario mongo db springdata 10-11-2011
Seminario mongo db springdata 10-11-2011
 
Pgpymongo y pgpycouch
Pgpymongo y pgpycouchPgpymongo y pgpycouch
Pgpymongo y pgpycouch
 

More from Eduard Tomàs

More from Eduard Tomàs (20)

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

Recently uploaded

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Recently uploaded (11)

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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
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
 
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
 
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.
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
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
 
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...
 
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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
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
 

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