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 GoogleMariano Iglesias
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDBAlejandro Mancilla
 
NoSQL, MongoDB y MongoMapper
NoSQL, MongoDB y MongoMapperNoSQL, MongoDB y MongoMapper
NoSQL, MongoDB y MongoMapperPat Cito
 
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 DBgreach_es
 
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...Demian Raschkovan
 
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 PersistenciaDavid J. Brenes
 
Introducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBIntroducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBErick Camacho
 
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-2011Paradigma Digital
 

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

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'sEduard Tomà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 KEDAEduard Tomàs
 
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 KedaEduard Tomàs
 
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 nuncaEduard Tomàs
 
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 KEDAEduard Tomàs
 
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 ServerlessEduard Tomàs
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y RendimientoEduard Tomàs
 
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)Eduard Tomàs
 
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)Eduard Tomàs
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Eduard Tomàs
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundoEduard Tomàs
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aksEduard Tomàs
 
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)Eduard Tomàs
 
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 quisieramosEduard Tomàs
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbEduard Tomàs
 
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 menosEduard Tomàs
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?Eduard Tomàs
 
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 deviceEduard 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

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
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
 
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
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 

Recently uploaded (10)

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
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
 
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
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 

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