SlideShare una empresa de Scribd logo
1 de 57
NoSql & mongodb
Juan Esteban Ladetto
jladetto@gmail.com
Un poco de historia
• Las bases de datos relacionales eran la única opción
• Las aplicaciones web tienen picos
• Especialmente las aplicaciones transaccionales (e-commerce)
• Los desarrolladores encontraron en memchached principalmente la solución a
sus problemas de escalabilidad
Escalando verticalmente
• Las bases de datos no están diseñadas para tener un esquema de datos
distribuídos
• Cuando la concurrencia aumenta la “única” manera es escalar verticalmente
• Después entontraron soluciones provistas por los proveedores de base de datos
que brindaban soluciones de escalabilidad (master-slave/sharding)
• Conocido como ‘scaling out’ o ‘horizontal scaling’
Escalando Base de datos – Master/Slave
• Master-Slave
• Todos las escrituras van al master, todas las lecturas se realizan sobre los slaves
• Los reads críticos pueden ser incorrectos ya que las escrituras no se propagan
inmediatamente
• Los tamaños de los data sets pueden plantear problemas ya que los master necesitan
duplicar información hacia lo slaves.
Transacciones – Propiedades ACID
• Atomic – Todo el trabajo en una transacción se completa o nada de la
transacción se realiza
• Consistent – Una transacción transforma la base de datos desde un
estado consistente hacia otro estado consistente. La consistencia está
definida en términos de restricciones.
• Isolated – Los resultados realizados por una transacción no son
visibles hasta que la transacción se complete (commit).
• Durable – Los resultados de una transacción terminada sobrevive a
fallos
Sistemas distribuidos
• CAP “Theorem”
• Consistency: Todos los clientes ven la misma información siempre
• Availability: Cada cliente puede siempre escribir y leer
• Partition tolerance: El Sistema funciona bien aunque tengamos la
información distribuída en particiones y alguna partición sufre alguna
anomalía
• “CAP theorem” dice que solo podés tener 2 de estas condiciones en un
Sistema distribuído
7
Nathan Hurst’s Blog
Propiedades – Propiedades BASE
• Acrónimo opuesto a ACID
• Basically Available,
• Soft state,
• Eventually Consistent
• Características
• Poca consistencia – los datos leidos pueden no ser los correctos
• Disponibilidad primero
• El mayor esfuerzo por brindar la mejor solución
• Simples y rápidos
In partitioned databases,
trading some consistency for availability
can lead to dramatic improvements in scalability.
Dan Pritchett, Ebay
La aparición de “NoSQL” y sus características
• Grandes volúmenes de información
• Google’s “big tables”
• Replicación y distribución escalable
• Potencialmente miles de máquinas
• Potencialmente distribuídas en todo el mundo
• Las consultas necesitan retornar respuestas rápidamente
• Sistemas con muchísimas consultas y pocos updates
• Inserciones y actualizaciones asincrónicas
• Sin un schema definido
• Responden al esquema transaccional BASE
• Responden al teorema CAP
• Principalmente de código abierto
Una definición de NoSQL
From www.nosql-database.org:
Next Generation Databases mostly addressing some of the points: being non-
relational, distributed, open-source and horizontal scalable. The original
intention has been modern web-scale databases. The movement began early
2009 and is growing rapidly. Often more characteristics apply as: schema-free,
easy replication support, simple API, eventually consistent / BASE (not ACID), a
huge data amount, and more.
Tipos de base de datos NoSQL
Existen varios tipos de base de datos del tipo NoSQL:
• Column Store – Cada porción guardada contiene datos de una sola
columna
• Document Store – guarda un documento organizado por tags
• Key-Value Store – guarda un valor por cada key
• Graph Databases – Persisten relaciones entre nodos
NoSQL: Column Store
• Cada porción de almacenamiento contiene información de una sola
columna
• Ejemplos: Hadoop/Hbase
• http://hadoop.apache.org/
• Yahoo, Facebook
NoSQL: Key/Value store
• Una table hash de keys
• Los valores se almacenan en cada uno de esos keys
• Rápido acceso, sencillo de administrar y fácil de usar
• Ejemplos:
• Voldermont/redis/memcached
NoSQL: Graph
• Cada nodo guarda información de relacionamiento con otros nodos
(grado de cercanía, etc)
• Ejemplos: neo4j
NoSQL: Document store
• Cada key es un documento que puede contener a su vez otros
documentos (subdocumentos)
• Ejemplos:
• CouchDB
• http://couchdb.apache.org/
• BBC
• MongoDB
• http://www.mongodb.org/
• Foursquare, Shutterfly
Qué es mongodb (10gen)
• MongoDB (sacado de mongodb.com):
Es una base de datos para las aplicaciones de hoy, innovativa, de rápido
time to market, que escala globalmente, fácil de operar y seguro.
Beneficios
• Rápido e iterativo desarrollo:
• La flexibilidad de los modelos de datos de mongodb y la posibilidad de tener
esquemas dinámicos hacen que sea sencillo para los desarrolladores crear y
evolucionar aplicaciones. El provisionamiento automático hacen que la integración y
evolución de aplicaciones sea realmente sencilla.
• Modelo de datos flexible:
• Los documentos de mongo pueden almacenar y combinar datos de cualquier tipo de
estructura dentro de una misma colección
• El acceso a la información es MUY sencilla, pocas condiciones y bien detalladas
• Los esquemas de datos se pueden modificar dinámicamente sin downtime.
• Menos inversión de tiempo pensando como persistir información y más trabajando
con los mismos
• Operaciones del tipo ALTER_TABLE o peor rediseñar los esquemas desde el principio
+Beneficios
• Multi-Datacenter Scalability.
• MongoDB puede escalar dentro de un datacenter o a través de multiples datacenters
distribuídos proveyendo nuevos niveles de disponibilidad y escalabilidad. A medida
que las estructuras son más grandes en términos de datos y niveles de acceso,
MongoDB escala rápidamente sin downtime y sin que uno tenga que modificar la
aplicación para que tome la nueva configuración.
• Conjunto integrado de funcionalidades
• Analísis, text search, datos geoespaciales, replicación global, hacen que uno pueda
usar mongodb como “solución” única para muchas aplicaciones del tipo real-time.
• Bajo TCO.
• MongoDB corre en servidores de tipo “commodity” y escala horizontalmente como
así verticalmente. Sin costo (open source) pero algunos beneficios si se quiere pagar
licenciamiento.
MondoDB Data Model
19
• Una instalación de MongoDB está compuesta por un
conjunto de base de datos. Una base de datos
contiene un conjunto de colecciones. Una colección
contiene un conjunto de documentos. Un document
es un conjunto de pares de key-value.
RDBMS MongoDB
Table
Row(s)
Index
Join
Partition
Partition Key
Collection
BSON (binary json)
Document
Index
Embedding & Linking
Shard
Shard Key
Reglas para crear documentos (estructuras de
datos)
• Regla 1: Todo documento si o si tiene que tener un _id
• Regla 2: Tamaño máximo de un documento 16 MB
Qué es un objeto JSON
{
"business_id": "rncjoVoEFUJGCUoC1JgnUA",
"full_address": "8466 W Peoria AvenSte 6nPeoria, AZ
85345",
"open": true,
"categories": ["Accountants", "Professional Services", "Tax
Services",],
"city": "Peoria",
"review_count": 3,
"name": "Peoria Income Tax Service",
"longitude": -112.241596,
"state": "AZ",
"stars": 5.0,
"latitude": 33.581867000000003,
"type": "business“
}
MongoDB Data Model
• MongoDB almacena documentos en una representación llamada
BSON (Binary JSON). Generalmente los documentos similares están
organizados como colecciones.
• Cada documento de MongoDB tiende a tener toda la información que
lo representa como un todo.
• Ej: data-model y blog (entradas, categorías, tags, usuarios, comentarios).
SQL Statement MongoDB commands
SELECT *
FROM table
db.collection.find()
SELECT *
FROM table
WHERE artist = ‘Nirvana’
db.collection.find({Artist:”Nirvana”})
SELECT*
FROM table
ORDER BY Title
db.collection.find().sort(Title:1)
DISTINCT .distinct()
GROUP BY .group()
>=, < $gte, $lt
Obteniendo información
Esquemas dinámicos
MONGODB RELATIONAL KEY-VALUE
Rich Data Model Yes No No
Dynamic Schema Yes No Yes
Typed Data Yes Yes No
Data Locality Yes No Yes
Field Updates Yes Yes No
Easy for Programmers Yes No Not When
Modelling Complex
Data Structures
Indices
• Indices como en cualquier base de datos es un mecanismo
importantísimo para el correcto procesamiento de información
• Uno puede definir índices de tipo unique, compuestos, para arrays,
con ttl, geoespaciales, de texto
• El optimizador de queries de mongo analiza y selecciona el índice más
eficiente. (explain al rescate)
• Mongodb puede llegar a utilizar más de un índice para optimizar una
consulta.
Tipos de consultas
• MongoDB soporta muchos tipos distintos de consultas y ofrece
frameworks que ayudan a cumplimentar sus debilidades. Además
mongodb (siempre que su driver lo soporte) puede devolver no
únicamente un documento completo, sino también subdocumentos)
• Consultas Key-value
• Consultas de rango
• Consultas Geoespaciales (con índices especiales)
• Consultas del tipo texto (con índices especiales)
• Aggregation Framework
• MapReduce
Consistencia y disponibilidad en MongoDB
Modelo Transaccional
• MongoDB proporciona las propiedades ACID a nivel de documento.
• Una o más propiedades pueden ser escritas en una sola operación,
incluyendo updates a multiple subdocumentos y elementos de un array. ACID
provisto por mongodb asegura la completa separación cuando uno
documento se está actualizando. Si un error se produce cuando se actualiza la
operación hace roll-back y siempre se obtiene una vista consistente del
documento.
• Con Write concerns nos permite definir como queremos asegurarnos que la
operación realmente se haya producido a distintos niveles.
IN-MEMORY Performance con ON-DISK
CAPACITY
• MongoDB hace uso extensivo de RAM para optimizar las operaciones
en la base de datos.
• Toda la información es manipulada y mapeada a través de memory-
mapped files.
• Leer desde memoria es mucho más rápido que leer de disco
• Muchas veces es suficiente con mongodb y no es necesario otro layer
de caching.
ALTA DISPONIBILIDAD - REPLICA SETS
• MongoDB puede mantener multiples copias de información llamada
replicasets usando mecanismos nativos de replicación. Una replica es
autónoma y previene downtime. Failover automático elimina las
necesidades de administradores de intervener manualmente.
• El número de replicas es configurable.
• Una operación sobre una replica puede devolver un ack cuando
determinada cantidad de replicasets devuelvan el OK de la operación.
ESCALABILIDAD: AUTO-SHARDING
• MongoDB prove escalabilidad horizontal utilizando una técnica
llamada sharding.
• Sharding distribuye información a lo largo del shar which is
transparent to applications. Sharding distributes data across multiple
physical partitions called shards. Sharding allows MongoDB
deployments to address the hardware limitations of a single server,
such as bottlenecks in RAM or disk I/O, without adding complexity to
the application. MongoDB automatically balances the data in the
cluster as the data grows or the size of the cluster increases or
decreases.
Seguridad
• Authentication. Built in o con integración con
LDAP, AD, Kerberos, etc
• Authorization. 2 tipos de roles: sobre los datos y
sobre las bases de datos.
• Auditoria. For regulatory compliance, security
administrators can use MongoDB's native audit
log to track access and administrative actions
taken against the database.
• Encripción. MongoDB data puede ser encriptada
tanto en transmission como en disco. Conexión
vía SSL.
CRUD EN MONGO
Manos a la obra
• Mongo Shell
• Accediendo a mongo a través del driver de c#
Modelado de datos
Diferencias con el esquema tradicional de
diseño
• Tradicional
• No importa tu aplicación
• Solo importan los datos
• Unicamente relevante
durante el diseño
• Formas normales y
desnormalización para
performance
MongoDB
• Siempre dependerá de tu
aplicación
• No únicamente importan los
datos sino como serán usados
• Relevante durante toda la vida
útil de tu aplicación
Modelado de datos con mongodb
El diseño de esquema es evolucionario
• Diseño y desarrollo
• Implementación y monitoreo
• Modificaciones iterativas
3 Componentes para diseñar los esquemas
1. La información que tu aplicación necesita
2. Cómo tu aplicación lee información
3. Cómo tu aplicación persiste información
Patrones de diseño comunes
Embeber para tener los datos a mano
Emb
// Contacto embebido
{"_id": 3,“nombre": “Perez, José",“CP": “1007",“telefonos": [ “011-4564-3456",
“011-4334-3411" ]}
Ref
// Contact document:
{"_id": 3,"nombre": "Perez, José", "CP": "1007"}
// Number documents:
{ "contacto_id": 3, “telefono": " 011-4564-3456"}
{ "contacto_id": 3, “telefono": "011-4334-3411"}
Patrones de diseño comunes
Referenciar para tener flexibilidad o necesidad
Emb
// post embebido
{"_id": "Primer Post", "author": "Juan", "text": "Arranco un blog que nunca continuaré",
"comments": [{ "author": "Pedro", "text": "Bienvenido!" },...]}
db.posts.find({“comments.author”: “Pedro”})
Ref
db.post esquema
{"_id": "Primer Post", "author": "Juan", "text": "Arranco un blog que nunca continuaré“}
db.comments esquema
{"_id": ObjectId(...),"post_id": “Primer Post","author": “Pedro","text": “Bienvenido! "}
db.comments.find({“comments.author”: “Pedro”})
• Límite 16 MB por documento y todo en RAM
• Documentos que crecen se mueven a nuevos lugares
Patrones de diseño comunes
Referenciar cuando tenemos relaciones M:N
Referenciado
// db.product esquema
{ "_id": "Mi Producto", ... }
// db.category esquema
{ "_id": "Una Categoria", ... }
// db.product_category esquema
{ "_id": ObjectId(...),"product_id": "Mi Producto","category_id": "Una Categoria" }
Embebido
// db.product esquema
{ "_id": "Mi Producto","categories": [{ "_id": "Una Categoria", ... }...] }
// db.category esquema
{ "_id": "Una Categoria","products": [{ "_id": "Mi Producto", ... }...] }
Referenciando ids
// db.product schema
{ "_id": "Mi Producto", "category_ids": [ "Una Categoria", ... ] }
// db.category schema
{ "_id": "Una Categoria" }
Patrones de diseño comunes
Esquemas polimórficos
Analicemos con un ejemplo práctico
MongoDB
MapReduce – Aggregation Framework
MapReduce
• Qué es?
• Posibilidades para buscar y condensar información
• En mongodb
• db.collection.mapReduce(mapFunction, reduceFunction, {params})
Juguemos (zips collections):
> var map = function() {emit(this.state, this.pop);}
> var reduce = function(state, pops){ return Array.sum(pops)}
> db.zips.mapReduce(map, reduce, {out: "map_reduce1"})
{
"result" : "map_reduce1",
"timeMillis" : 2376,
"counts" : {
"input" : 29353,
"emit" : 29353,
"reduce" : 346,
"output" : 51
},
"ok" : 1
}
> db.map_reduce1.find()
MapReduce
Algo un poquito más complejo
var map = function () {
for (var i = 0; i< this.scores.length; i++){
var key = this.scores[i].type;
var value = { count:1, score: this.scores[i].score};
emit(key, value);
}}
var reduce = function(type, scores) {
reducedVal = { count: 0, score: 0.0 };
for (var idx = 0; idx < scores.length; idx++) {
reducedVal.count += scores[idx].count;
reducedVal.score += scores[idx].score;
}
return reducedVal;
var finalize = function (key, reducedVal) {
reducedVal.avg = reducedVal.score/reducedVal.count;
return reducedVal;
};
db.students.mapReduce( map, reduce,
{
out: { merge: "map_reduce_example" },
query: { name:
{ $gt: 'J' }
},
finalize: finalize
}
)
MapReduce
Troubleshooting Map-Reduce Functions
> var map = function (){emit(key, value)}
> var emit = function (key, value){print (key, tojson(value)}
> var doc = db.coll.findOne()
> doc
map.apply(doc)
var reduceFunction1 = function(keyCustId, valuesPrices){}
var myTestValues = [ 5, 5, 10 ];
reduceFunction1('myKey', myTestValues);
mapReduce desde c#
var map = “”;
Var reduce =“”;
var collection = db.GetCollection("movies");
var options = new MapReduceOptionsBuilder();
options.SetFinalize(finalize);
options.SetOutput(MapReduceOutput.Inline);
var results = collection.MapReduce(map, reduce, options);
foreach (var result in results.GetResults())
{
Console.WriteLine(result.ToJson());
}
Aggregation Framework
- Evolución de mapReduce. c++, código compilado, 10x veces más rápido que
mapReduce
• Qué es básicamente?
• Una serie de transformaciones sobre los documentos de una colección
• Ejecutados en etapas
• El resultado es un cursor o una colección
• Conjunto grande de librerías de funciones
• Filtrado, computo, grupo, sumarización
• El resultado de una etapa es enviada a la siguiente
• Las operaciones se ejecutan en un orden secuencial
$match $Project $group $sort
Aggregation Framework
Pipeline Operators
• $match
• Filtrar
• $sort
• Ordenar Documentos
• $limit / $skip
• Paginar documentos
• $redact
• Restringir documentos
• $geoNear
• Ordenar por proximidad
• $let, $map
• Definir variables
• $project
• Rearmar documentos
• $group
• Sumarizar documentos
• $unwind
• Expandir array
Aggregation Framework
$match
{subject: "Hello There",words:
218,from:
"norberto@hotmail.com"}
{subject: "I love
Hofbrauhaus",words: 90,from:
"norberto@fargo.com"}
{subject: "MongoDB
Rules!",words: 100,from:
"hipster@somemail.com"}
{ $match: {from:
"hipster@somemail.com"}}
{subject: "MongoDB
Rules!",words: 100,from:
"hipster@somemail.com"}
{ $match: {words: {$gt: 100}}}
Aggregation Framework
$project
{_id: 12345,subject: "Hello There",words:
218,from:"norberto@mongodb.com"to: [
"marc@mongodb.com","sam@mongodb.com"
],account: "mongodb mail",date:
ISODate("2012-08-05"),replies: 3,folder:
"Inbox",...}
{ $project: {_id: 0,subject: 1,from: 1}}
{subject: "MongoDB Rules!", from:
"hipster@somemail.com"}
{ $project: {spamIndex: {$divide: ["$words",
"$replies"]
},user: "$from"
}}
{
_id: 12345,
spamIndex: 72.6666 ,
user: "norberto@mongodb.com"
}
{ $project: {subject: 1,stats: {replies: "$replies",from:
"$from",date: "$date"
}}}
{
_id: 375,subject: "Hello There",
stats: {replies: 3,from: "norberto@mongodb.com",date:
ISODate("2012-08-05")
}}
Aggregate Framework
$group
{subject: "Hello There",words: 218,from:
"norberto@mongodb.com"}
{subject: "I love Hofbrauhaus",words:
90,from: "norberto@mongodb.com"}
{subject: "MongoDB Rules!",words:
100,from: "hipster@somemail.com"}
{ $group: {_id: "$from",avgWords: { $avg:"$words" }}}
{_id: "norberto@mongodb.com",avgWords: 154}
{_id: "hipster@somemail.com",avgWords: 100}
{ $group: {_id: "$from",words: { $sum: "$words"
},mails: { $sum: 1 }}}
{_id: "norberto@mongodb.com",words: 308,mails: 2}
{_id: "hipster@somemail.com",words: 100,mails: 1}
Aggregate Framework
$unwind
{_id: 2222,subject: "2.8 will be great!",to: [
"marc@mongodb.com","eliot@mongodb.c
om","asya@mongodb.com",],account:
"mongodb mail"}
{ $unwind: "$to" }
{ subject: "2.8 will be great!",
to: "marc@mongodb.com",
account : "mongodb mail” }
{ subject: "2.8 will be great!",
to: "eliot@mongodb.com",
account : "mongodb mail” }
{ subject: "2.8 will be great!",
to: "asya@mongodb.com",
account : "mongodb mail” }
Agregate Framework
• Uso
• collection.aggregate([…], {<options>})
• Devuelve un cursor
• allowDiskUse, explain
• Usar $out para guardarlo en una colección
• db.runCommand({aggregate:<collection>, pipeline:[…]})
• Devuelve un documento (16 MB)
• Ejemplos:
• db.books.aggregate([{ $project: { language: 1 }},{ $group: { _id: "$language", numTitles: { $sum: 1 }}}])
• { _id: "Russian", numTitles: 1 },
• { _id: "English", numTitles: 2 }
• db.runCommand({aggregate: "books", pipeline: [{ $project: { language: 1 }},$group: { _id: "$language", numTitles: { $sum:1}}}])
• {result : [{ _id: "Russian", numTitles: 1 },{ _id: "English", numTitles: 2 }],“ok” : 1}
Aggregation Framework - Ejemplos
• (zips snippet)
Spatial indexes
• Mongodb almacena información geoespacial con formato geojson
• Veamos algunos ejemplos:
Listar los aeropuertos de un estado
> use geo
> var cal = db.states.findOne( {code : "CA"} );
> db.airports.find( { loc : { $geoWithin : { $geometry : cal.loc } } }, { name : 1 , type : 1, code : 1, _id: 0 } );
> db.airports.find( { loc : { $geoWithin : { $geometry : cal.loc } }, type : "International" }, { name : 1 , type : 1, code : 1, _id: 0 }
).sort({ name : 1 });
//y si agregamos un índice espacial?
db.airports.ensureIndex( { "loc" : "2dsphere" } );
Spatial indexes
Interección de planos
> use geo
> var cal = db.states.findOne( {code : "CA"} );
db.states.find({ loc : { $geoIntersects : { $geometry : cal.loc } } , code : { $ne : "CA" } }, { name : 1,
code : 1 , _id : 0 } );
Proximidad
db.airports.find({loc : {$near : {$geometry : { type : "Point" , coordinates : [-73.965355,40.782865] },
$maxDistance : 20000}}, type : "International"}, {name : 1,code : 1,_id : 0});
Text Search en mongodb
• Algo que está comenzando
• http://docs.mongodb.org/manual/reference/operator/qu
ery/text/
• db.texto.ensureIndex({ caption : "text" }, { default_language: "english" })
• db.collection.ensureIndex({content: "text", "users.comments": "text", "users.profiles": "text"},{ name:
"MyTextIndex" })
• db.collection.ensureIndex({content: "text", "users.comments": "text","users.profiles": "text"},
• { name: "MyTextIndex", weights: {content: 10, "users.comments": 5, "users.profiles": 2} })
• db.texto.find({$text:{$search:”algo”}})

Más contenido relacionado

La actualidad más candente

Diferencia entre algoritmo de path finding y algoritmo de dijkstra
Diferencia entre algoritmo de path finding y algoritmo de dijkstraDiferencia entre algoritmo de path finding y algoritmo de dijkstra
Diferencia entre algoritmo de path finding y algoritmo de dijkstranacasma
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de SoftwareRene Guaman-Quinche
 
tutorial de eclipse
tutorial de eclipsetutorial de eclipse
tutorial de eclipseTania Tellez
 
Especificación de requisitos de un sitio web
Especificación de requisitos de un sitio webEspecificación de requisitos de un sitio web
Especificación de requisitos de un sitio webRafael Pedraza-Jimenez
 
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPCPROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPCfalco87
 
Cuadro comparativo base de datos
Cuadro comparativo base de datosCuadro comparativo base de datos
Cuadro comparativo base de datosAna1Alvarado
 
Un resumen breve de una base de datos
Un resumen breve de una base de datosUn resumen breve de una base de datos
Un resumen breve de una base de datoslauramurillomoreno
 
Trabajo Final Sistemas Operativos
Trabajo Final Sistemas OperativosTrabajo Final Sistemas Operativos
Trabajo Final Sistemas Operativosgaby71293
 

La actualidad más candente (20)

Paginación y segmentación
Paginación y segmentaciónPaginación y segmentación
Paginación y segmentación
 
Diferencia entre algoritmo de path finding y algoritmo de dijkstra
Diferencia entre algoritmo de path finding y algoritmo de dijkstraDiferencia entre algoritmo de path finding y algoritmo de dijkstra
Diferencia entre algoritmo de path finding y algoritmo de dijkstra
 
Ordenamiento por insercion
Ordenamiento por insercionOrdenamiento por insercion
Ordenamiento por insercion
 
MVC
MVCMVC
MVC
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de Software
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
tutorial de eclipse
tutorial de eclipsetutorial de eclipse
tutorial de eclipse
 
Especificación de requisitos de un sitio web
Especificación de requisitos de un sitio webEspecificación de requisitos de un sitio web
Especificación de requisitos de un sitio web
 
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPCPROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
 
Cuadro comparativo base de datos
Cuadro comparativo base de datosCuadro comparativo base de datos
Cuadro comparativo base de datos
 
Unidad 2 expresiones regulares
Unidad 2 expresiones regularesUnidad 2 expresiones regulares
Unidad 2 expresiones regulares
 
Neo4j - A Graph Database
Neo4j - A Graph DatabaseNeo4j - A Graph Database
Neo4j - A Graph Database
 
Taller de Base de Datos - Unidad 5 transacciones
Taller de Base de Datos - Unidad 5  transaccionesTaller de Base de Datos - Unidad 5  transacciones
Taller de Base de Datos - Unidad 5 transacciones
 
Un resumen breve de una base de datos
Un resumen breve de una base de datosUn resumen breve de una base de datos
Un resumen breve de una base de datos
 
Trabajo Final Sistemas Operativos
Trabajo Final Sistemas OperativosTrabajo Final Sistemas Operativos
Trabajo Final Sistemas Operativos
 
Patrones Grasp
Patrones GraspPatrones Grasp
Patrones Grasp
 
Java swing
Java swingJava swing
Java swing
 
DB1 Unidad 8: Replicación
DB1 Unidad 8: ReplicaciónDB1 Unidad 8: Replicación
DB1 Unidad 8: Replicación
 
Database
DatabaseDatabase
Database
 
Aplicaciones móviles
Aplicaciones móvilesAplicaciones móviles
Aplicaciones móviles
 

Similar a Introducción mongodb y desarrollo

Mongo bd michael landeo vargas
Mongo bd michael landeo vargasMongo bd michael landeo vargas
Mongo bd michael landeo vargasMichaelAngel1000
 
1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db.. ..
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLRoanny Lamas
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQLCycle-IT
 
Bases de Datos No Relacionales
Bases de Datos No RelacionalesBases de Datos No Relacionales
Bases de Datos No RelacionalesBEEVA_es
 
Act4 base datos_reyes_rosalba
Act4 base datos_reyes_rosalbaAct4 base datos_reyes_rosalba
Act4 base datos_reyes_rosalbaRozzi Reyes
 

Similar a Introducción mongodb y desarrollo (20)

Mongo bd michael landeo vargas
Mongo bd michael landeo vargasMongo bd michael landeo vargas
Mongo bd michael landeo vargas
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 
NoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de DatosNoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de Datos
 
1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db
 
MongoDB
MongoDBMongoDB
MongoDB
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
 
Act4 bd teo
Act4 bd teoAct4 bd teo
Act4 bd teo
 
Base de Datos
Base de DatosBase de Datos
Base de Datos
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQL
 
Principales bases de datos existentes
Principales bases de datos existentesPrincipales bases de datos existentes
Principales bases de datos existentes
 
MongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercadoMongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercado
 
Principales bases de datos existentes
Principales bases de datos existentesPrincipales bases de datos existentes
Principales bases de datos existentes
 
Bases de datos
Bases de datosBases de datos
Bases de datos
 
Pricipales bases de datos
Pricipales bases de datosPricipales bases de datos
Pricipales bases de datos
 
Base de datos
Base de datosBase de datos
Base de datos
 
Base de datos
Base de datosBase de datos
Base de datos
 
Bases de Datos No Relacionales
Bases de Datos No RelacionalesBases de Datos No Relacionales
Bases de Datos No Relacionales
 
Act4 base datos_reyes_rosalba
Act4 base datos_reyes_rosalbaAct4 base datos_reyes_rosalba
Act4 base datos_reyes_rosalba
 
Presentacion
PresentacionPresentacion
Presentacion
 
Un viaje por Cosmos DB
Un viaje por Cosmos DBUn viaje por Cosmos DB
Un viaje por Cosmos DB
 

Último

Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 

Último (20)

Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 

Introducción mongodb y desarrollo

  • 1. NoSql & mongodb Juan Esteban Ladetto jladetto@gmail.com
  • 2. Un poco de historia • Las bases de datos relacionales eran la única opción • Las aplicaciones web tienen picos • Especialmente las aplicaciones transaccionales (e-commerce) • Los desarrolladores encontraron en memchached principalmente la solución a sus problemas de escalabilidad
  • 3. Escalando verticalmente • Las bases de datos no están diseñadas para tener un esquema de datos distribuídos • Cuando la concurrencia aumenta la “única” manera es escalar verticalmente • Después entontraron soluciones provistas por los proveedores de base de datos que brindaban soluciones de escalabilidad (master-slave/sharding) • Conocido como ‘scaling out’ o ‘horizontal scaling’
  • 4. Escalando Base de datos – Master/Slave • Master-Slave • Todos las escrituras van al master, todas las lecturas se realizan sobre los slaves • Los reads críticos pueden ser incorrectos ya que las escrituras no se propagan inmediatamente • Los tamaños de los data sets pueden plantear problemas ya que los master necesitan duplicar información hacia lo slaves.
  • 5. Transacciones – Propiedades ACID • Atomic – Todo el trabajo en una transacción se completa o nada de la transacción se realiza • Consistent – Una transacción transforma la base de datos desde un estado consistente hacia otro estado consistente. La consistencia está definida en términos de restricciones. • Isolated – Los resultados realizados por una transacción no son visibles hasta que la transacción se complete (commit). • Durable – Los resultados de una transacción terminada sobrevive a fallos
  • 6. Sistemas distribuidos • CAP “Theorem” • Consistency: Todos los clientes ven la misma información siempre • Availability: Cada cliente puede siempre escribir y leer • Partition tolerance: El Sistema funciona bien aunque tengamos la información distribuída en particiones y alguna partición sufre alguna anomalía • “CAP theorem” dice que solo podés tener 2 de estas condiciones en un Sistema distribuído
  • 8. Propiedades – Propiedades BASE • Acrónimo opuesto a ACID • Basically Available, • Soft state, • Eventually Consistent • Características • Poca consistencia – los datos leidos pueden no ser los correctos • Disponibilidad primero • El mayor esfuerzo por brindar la mejor solución • Simples y rápidos In partitioned databases, trading some consistency for availability can lead to dramatic improvements in scalability. Dan Pritchett, Ebay
  • 9. La aparición de “NoSQL” y sus características • Grandes volúmenes de información • Google’s “big tables” • Replicación y distribución escalable • Potencialmente miles de máquinas • Potencialmente distribuídas en todo el mundo • Las consultas necesitan retornar respuestas rápidamente • Sistemas con muchísimas consultas y pocos updates • Inserciones y actualizaciones asincrónicas • Sin un schema definido • Responden al esquema transaccional BASE • Responden al teorema CAP • Principalmente de código abierto
  • 10. Una definición de NoSQL From www.nosql-database.org: Next Generation Databases mostly addressing some of the points: being non- relational, distributed, open-source and horizontal scalable. The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), a huge data amount, and more.
  • 11. Tipos de base de datos NoSQL Existen varios tipos de base de datos del tipo NoSQL: • Column Store – Cada porción guardada contiene datos de una sola columna • Document Store – guarda un documento organizado por tags • Key-Value Store – guarda un valor por cada key • Graph Databases – Persisten relaciones entre nodos
  • 12. NoSQL: Column Store • Cada porción de almacenamiento contiene información de una sola columna • Ejemplos: Hadoop/Hbase • http://hadoop.apache.org/ • Yahoo, Facebook
  • 13. NoSQL: Key/Value store • Una table hash de keys • Los valores se almacenan en cada uno de esos keys • Rápido acceso, sencillo de administrar y fácil de usar • Ejemplos: • Voldermont/redis/memcached
  • 14. NoSQL: Graph • Cada nodo guarda información de relacionamiento con otros nodos (grado de cercanía, etc) • Ejemplos: neo4j
  • 15. NoSQL: Document store • Cada key es un documento que puede contener a su vez otros documentos (subdocumentos) • Ejemplos: • CouchDB • http://couchdb.apache.org/ • BBC • MongoDB • http://www.mongodb.org/ • Foursquare, Shutterfly
  • 16. Qué es mongodb (10gen) • MongoDB (sacado de mongodb.com): Es una base de datos para las aplicaciones de hoy, innovativa, de rápido time to market, que escala globalmente, fácil de operar y seguro.
  • 17. Beneficios • Rápido e iterativo desarrollo: • La flexibilidad de los modelos de datos de mongodb y la posibilidad de tener esquemas dinámicos hacen que sea sencillo para los desarrolladores crear y evolucionar aplicaciones. El provisionamiento automático hacen que la integración y evolución de aplicaciones sea realmente sencilla. • Modelo de datos flexible: • Los documentos de mongo pueden almacenar y combinar datos de cualquier tipo de estructura dentro de una misma colección • El acceso a la información es MUY sencilla, pocas condiciones y bien detalladas • Los esquemas de datos se pueden modificar dinámicamente sin downtime. • Menos inversión de tiempo pensando como persistir información y más trabajando con los mismos • Operaciones del tipo ALTER_TABLE o peor rediseñar los esquemas desde el principio
  • 18. +Beneficios • Multi-Datacenter Scalability. • MongoDB puede escalar dentro de un datacenter o a través de multiples datacenters distribuídos proveyendo nuevos niveles de disponibilidad y escalabilidad. A medida que las estructuras son más grandes en términos de datos y niveles de acceso, MongoDB escala rápidamente sin downtime y sin que uno tenga que modificar la aplicación para que tome la nueva configuración. • Conjunto integrado de funcionalidades • Analísis, text search, datos geoespaciales, replicación global, hacen que uno pueda usar mongodb como “solución” única para muchas aplicaciones del tipo real-time. • Bajo TCO. • MongoDB corre en servidores de tipo “commodity” y escala horizontalmente como así verticalmente. Sin costo (open source) pero algunos beneficios si se quiere pagar licenciamiento.
  • 19. MondoDB Data Model 19 • Una instalación de MongoDB está compuesta por un conjunto de base de datos. Una base de datos contiene un conjunto de colecciones. Una colección contiene un conjunto de documentos. Un document es un conjunto de pares de key-value. RDBMS MongoDB Table Row(s) Index Join Partition Partition Key Collection BSON (binary json) Document Index Embedding & Linking Shard Shard Key
  • 20. Reglas para crear documentos (estructuras de datos) • Regla 1: Todo documento si o si tiene que tener un _id • Regla 2: Tamaño máximo de un documento 16 MB
  • 21. Qué es un objeto JSON { "business_id": "rncjoVoEFUJGCUoC1JgnUA", "full_address": "8466 W Peoria AvenSte 6nPeoria, AZ 85345", "open": true, "categories": ["Accountants", "Professional Services", "Tax Services",], "city": "Peoria", "review_count": 3, "name": "Peoria Income Tax Service", "longitude": -112.241596, "state": "AZ", "stars": 5.0, "latitude": 33.581867000000003, "type": "business“ }
  • 22. MongoDB Data Model • MongoDB almacena documentos en una representación llamada BSON (Binary JSON). Generalmente los documentos similares están organizados como colecciones. • Cada documento de MongoDB tiende a tener toda la información que lo representa como un todo. • Ej: data-model y blog (entradas, categorías, tags, usuarios, comentarios).
  • 23. SQL Statement MongoDB commands SELECT * FROM table db.collection.find() SELECT * FROM table WHERE artist = ‘Nirvana’ db.collection.find({Artist:”Nirvana”}) SELECT* FROM table ORDER BY Title db.collection.find().sort(Title:1) DISTINCT .distinct() GROUP BY .group() >=, < $gte, $lt Obteniendo información
  • 24. Esquemas dinámicos MONGODB RELATIONAL KEY-VALUE Rich Data Model Yes No No Dynamic Schema Yes No Yes Typed Data Yes Yes No Data Locality Yes No Yes Field Updates Yes Yes No Easy for Programmers Yes No Not When Modelling Complex Data Structures
  • 25. Indices • Indices como en cualquier base de datos es un mecanismo importantísimo para el correcto procesamiento de información • Uno puede definir índices de tipo unique, compuestos, para arrays, con ttl, geoespaciales, de texto • El optimizador de queries de mongo analiza y selecciona el índice más eficiente. (explain al rescate) • Mongodb puede llegar a utilizar más de un índice para optimizar una consulta.
  • 26. Tipos de consultas • MongoDB soporta muchos tipos distintos de consultas y ofrece frameworks que ayudan a cumplimentar sus debilidades. Además mongodb (siempre que su driver lo soporte) puede devolver no únicamente un documento completo, sino también subdocumentos) • Consultas Key-value • Consultas de rango • Consultas Geoespaciales (con índices especiales) • Consultas del tipo texto (con índices especiales) • Aggregation Framework • MapReduce
  • 27. Consistencia y disponibilidad en MongoDB Modelo Transaccional • MongoDB proporciona las propiedades ACID a nivel de documento. • Una o más propiedades pueden ser escritas en una sola operación, incluyendo updates a multiple subdocumentos y elementos de un array. ACID provisto por mongodb asegura la completa separación cuando uno documento se está actualizando. Si un error se produce cuando se actualiza la operación hace roll-back y siempre se obtiene una vista consistente del documento. • Con Write concerns nos permite definir como queremos asegurarnos que la operación realmente se haya producido a distintos niveles.
  • 28. IN-MEMORY Performance con ON-DISK CAPACITY • MongoDB hace uso extensivo de RAM para optimizar las operaciones en la base de datos. • Toda la información es manipulada y mapeada a través de memory- mapped files. • Leer desde memoria es mucho más rápido que leer de disco • Muchas veces es suficiente con mongodb y no es necesario otro layer de caching.
  • 29. ALTA DISPONIBILIDAD - REPLICA SETS • MongoDB puede mantener multiples copias de información llamada replicasets usando mecanismos nativos de replicación. Una replica es autónoma y previene downtime. Failover automático elimina las necesidades de administradores de intervener manualmente. • El número de replicas es configurable. • Una operación sobre una replica puede devolver un ack cuando determinada cantidad de replicasets devuelvan el OK de la operación.
  • 30. ESCALABILIDAD: AUTO-SHARDING • MongoDB prove escalabilidad horizontal utilizando una técnica llamada sharding. • Sharding distribuye información a lo largo del shar which is transparent to applications. Sharding distributes data across multiple physical partitions called shards. Sharding allows MongoDB deployments to address the hardware limitations of a single server, such as bottlenecks in RAM or disk I/O, without adding complexity to the application. MongoDB automatically balances the data in the cluster as the data grows or the size of the cluster increases or decreases.
  • 31. Seguridad • Authentication. Built in o con integración con LDAP, AD, Kerberos, etc • Authorization. 2 tipos de roles: sobre los datos y sobre las bases de datos. • Auditoria. For regulatory compliance, security administrators can use MongoDB's native audit log to track access and administrative actions taken against the database. • Encripción. MongoDB data puede ser encriptada tanto en transmission como en disco. Conexión vía SSL.
  • 33. Manos a la obra • Mongo Shell • Accediendo a mongo a través del driver de c#
  • 35. Diferencias con el esquema tradicional de diseño • Tradicional • No importa tu aplicación • Solo importan los datos • Unicamente relevante durante el diseño • Formas normales y desnormalización para performance MongoDB • Siempre dependerá de tu aplicación • No únicamente importan los datos sino como serán usados • Relevante durante toda la vida útil de tu aplicación
  • 36. Modelado de datos con mongodb El diseño de esquema es evolucionario • Diseño y desarrollo • Implementación y monitoreo • Modificaciones iterativas
  • 37. 3 Componentes para diseñar los esquemas 1. La información que tu aplicación necesita 2. Cómo tu aplicación lee información 3. Cómo tu aplicación persiste información
  • 38. Patrones de diseño comunes Embeber para tener los datos a mano Emb // Contacto embebido {"_id": 3,“nombre": “Perez, José",“CP": “1007",“telefonos": [ “011-4564-3456", “011-4334-3411" ]} Ref // Contact document: {"_id": 3,"nombre": "Perez, José", "CP": "1007"} // Number documents: { "contacto_id": 3, “telefono": " 011-4564-3456"} { "contacto_id": 3, “telefono": "011-4334-3411"}
  • 39. Patrones de diseño comunes Referenciar para tener flexibilidad o necesidad Emb // post embebido {"_id": "Primer Post", "author": "Juan", "text": "Arranco un blog que nunca continuaré", "comments": [{ "author": "Pedro", "text": "Bienvenido!" },...]} db.posts.find({“comments.author”: “Pedro”}) Ref db.post esquema {"_id": "Primer Post", "author": "Juan", "text": "Arranco un blog que nunca continuaré“} db.comments esquema {"_id": ObjectId(...),"post_id": “Primer Post","author": “Pedro","text": “Bienvenido! "} db.comments.find({“comments.author”: “Pedro”}) • Límite 16 MB por documento y todo en RAM • Documentos que crecen se mueven a nuevos lugares
  • 40. Patrones de diseño comunes Referenciar cuando tenemos relaciones M:N Referenciado // db.product esquema { "_id": "Mi Producto", ... } // db.category esquema { "_id": "Una Categoria", ... } // db.product_category esquema { "_id": ObjectId(...),"product_id": "Mi Producto","category_id": "Una Categoria" } Embebido // db.product esquema { "_id": "Mi Producto","categories": [{ "_id": "Una Categoria", ... }...] } // db.category esquema { "_id": "Una Categoria","products": [{ "_id": "Mi Producto", ... }...] } Referenciando ids // db.product schema { "_id": "Mi Producto", "category_ids": [ "Una Categoria", ... ] } // db.category schema { "_id": "Una Categoria" }
  • 41. Patrones de diseño comunes Esquemas polimórficos Analicemos con un ejemplo práctico
  • 43. MapReduce • Qué es? • Posibilidades para buscar y condensar información • En mongodb • db.collection.mapReduce(mapFunction, reduceFunction, {params}) Juguemos (zips collections): > var map = function() {emit(this.state, this.pop);} > var reduce = function(state, pops){ return Array.sum(pops)} > db.zips.mapReduce(map, reduce, {out: "map_reduce1"}) { "result" : "map_reduce1", "timeMillis" : 2376, "counts" : { "input" : 29353, "emit" : 29353, "reduce" : 346, "output" : 51 }, "ok" : 1 } > db.map_reduce1.find()
  • 44. MapReduce Algo un poquito más complejo var map = function () { for (var i = 0; i< this.scores.length; i++){ var key = this.scores[i].type; var value = { count:1, score: this.scores[i].score}; emit(key, value); }} var reduce = function(type, scores) { reducedVal = { count: 0, score: 0.0 }; for (var idx = 0; idx < scores.length; idx++) { reducedVal.count += scores[idx].count; reducedVal.score += scores[idx].score; } return reducedVal; var finalize = function (key, reducedVal) { reducedVal.avg = reducedVal.score/reducedVal.count; return reducedVal; }; db.students.mapReduce( map, reduce, { out: { merge: "map_reduce_example" }, query: { name: { $gt: 'J' } }, finalize: finalize } )
  • 45. MapReduce Troubleshooting Map-Reduce Functions > var map = function (){emit(key, value)} > var emit = function (key, value){print (key, tojson(value)} > var doc = db.coll.findOne() > doc map.apply(doc) var reduceFunction1 = function(keyCustId, valuesPrices){} var myTestValues = [ 5, 5, 10 ]; reduceFunction1('myKey', myTestValues);
  • 46. mapReduce desde c# var map = “”; Var reduce =“”; var collection = db.GetCollection("movies"); var options = new MapReduceOptionsBuilder(); options.SetFinalize(finalize); options.SetOutput(MapReduceOutput.Inline); var results = collection.MapReduce(map, reduce, options); foreach (var result in results.GetResults()) { Console.WriteLine(result.ToJson()); }
  • 47. Aggregation Framework - Evolución de mapReduce. c++, código compilado, 10x veces más rápido que mapReduce • Qué es básicamente? • Una serie de transformaciones sobre los documentos de una colección • Ejecutados en etapas • El resultado es un cursor o una colección • Conjunto grande de librerías de funciones • Filtrado, computo, grupo, sumarización • El resultado de una etapa es enviada a la siguiente • Las operaciones se ejecutan en un orden secuencial $match $Project $group $sort
  • 48. Aggregation Framework Pipeline Operators • $match • Filtrar • $sort • Ordenar Documentos • $limit / $skip • Paginar documentos • $redact • Restringir documentos • $geoNear • Ordenar por proximidad • $let, $map • Definir variables • $project • Rearmar documentos • $group • Sumarizar documentos • $unwind • Expandir array
  • 49. Aggregation Framework $match {subject: "Hello There",words: 218,from: "norberto@hotmail.com"} {subject: "I love Hofbrauhaus",words: 90,from: "norberto@fargo.com"} {subject: "MongoDB Rules!",words: 100,from: "hipster@somemail.com"} { $match: {from: "hipster@somemail.com"}} {subject: "MongoDB Rules!",words: 100,from: "hipster@somemail.com"} { $match: {words: {$gt: 100}}}
  • 50. Aggregation Framework $project {_id: 12345,subject: "Hello There",words: 218,from:"norberto@mongodb.com"to: [ "marc@mongodb.com","sam@mongodb.com" ],account: "mongodb mail",date: ISODate("2012-08-05"),replies: 3,folder: "Inbox",...} { $project: {_id: 0,subject: 1,from: 1}} {subject: "MongoDB Rules!", from: "hipster@somemail.com"} { $project: {spamIndex: {$divide: ["$words", "$replies"] },user: "$from" }} { _id: 12345, spamIndex: 72.6666 , user: "norberto@mongodb.com" } { $project: {subject: 1,stats: {replies: "$replies",from: "$from",date: "$date" }}} { _id: 375,subject: "Hello There", stats: {replies: 3,from: "norberto@mongodb.com",date: ISODate("2012-08-05") }}
  • 51. Aggregate Framework $group {subject: "Hello There",words: 218,from: "norberto@mongodb.com"} {subject: "I love Hofbrauhaus",words: 90,from: "norberto@mongodb.com"} {subject: "MongoDB Rules!",words: 100,from: "hipster@somemail.com"} { $group: {_id: "$from",avgWords: { $avg:"$words" }}} {_id: "norberto@mongodb.com",avgWords: 154} {_id: "hipster@somemail.com",avgWords: 100} { $group: {_id: "$from",words: { $sum: "$words" },mails: { $sum: 1 }}} {_id: "norberto@mongodb.com",words: 308,mails: 2} {_id: "hipster@somemail.com",words: 100,mails: 1}
  • 52. Aggregate Framework $unwind {_id: 2222,subject: "2.8 will be great!",to: [ "marc@mongodb.com","eliot@mongodb.c om","asya@mongodb.com",],account: "mongodb mail"} { $unwind: "$to" } { subject: "2.8 will be great!", to: "marc@mongodb.com", account : "mongodb mail” } { subject: "2.8 will be great!", to: "eliot@mongodb.com", account : "mongodb mail” } { subject: "2.8 will be great!", to: "asya@mongodb.com", account : "mongodb mail” }
  • 53. Agregate Framework • Uso • collection.aggregate([…], {<options>}) • Devuelve un cursor • allowDiskUse, explain • Usar $out para guardarlo en una colección • db.runCommand({aggregate:<collection>, pipeline:[…]}) • Devuelve un documento (16 MB) • Ejemplos: • db.books.aggregate([{ $project: { language: 1 }},{ $group: { _id: "$language", numTitles: { $sum: 1 }}}]) • { _id: "Russian", numTitles: 1 }, • { _id: "English", numTitles: 2 } • db.runCommand({aggregate: "books", pipeline: [{ $project: { language: 1 }},$group: { _id: "$language", numTitles: { $sum:1}}}]) • {result : [{ _id: "Russian", numTitles: 1 },{ _id: "English", numTitles: 2 }],“ok” : 1}
  • 54. Aggregation Framework - Ejemplos • (zips snippet)
  • 55. Spatial indexes • Mongodb almacena información geoespacial con formato geojson • Veamos algunos ejemplos: Listar los aeropuertos de un estado > use geo > var cal = db.states.findOne( {code : "CA"} ); > db.airports.find( { loc : { $geoWithin : { $geometry : cal.loc } } }, { name : 1 , type : 1, code : 1, _id: 0 } ); > db.airports.find( { loc : { $geoWithin : { $geometry : cal.loc } }, type : "International" }, { name : 1 , type : 1, code : 1, _id: 0 } ).sort({ name : 1 }); //y si agregamos un índice espacial? db.airports.ensureIndex( { "loc" : "2dsphere" } );
  • 56. Spatial indexes Interección de planos > use geo > var cal = db.states.findOne( {code : "CA"} ); db.states.find({ loc : { $geoIntersects : { $geometry : cal.loc } } , code : { $ne : "CA" } }, { name : 1, code : 1 , _id : 0 } ); Proximidad db.airports.find({loc : {$near : {$geometry : { type : "Point" , coordinates : [-73.965355,40.782865] }, $maxDistance : 20000}}, type : "International"}, {name : 1,code : 1,_id : 0});
  • 57. Text Search en mongodb • Algo que está comenzando • http://docs.mongodb.org/manual/reference/operator/qu ery/text/ • db.texto.ensureIndex({ caption : "text" }, { default_language: "english" }) • db.collection.ensureIndex({content: "text", "users.comments": "text", "users.profiles": "text"},{ name: "MyTextIndex" }) • db.collection.ensureIndex({content: "text", "users.comments": "text","users.profiles": "text"}, • { name: "MyTextIndex", weights: {content: 10, "users.comments": 5, "users.profiles": 2} }) • db.texto.find({$text:{$search:”algo”}})