SlideShare una empresa de Scribd logo
Bd NoSQL
Documentos
PROFA. MERCY OSPINA
mercy.ospinat@gmail.com
Agenda
Modelo de datos
Operaciones
Técnicas usadas
Cuando usar
Caso de estudio
Modelo de datos
Un documento auto descrito que puede estar en
formato Json o XML
Un documento Json (los mas usados)
◦ Es un conjunto de clave:valor o arreglos de clave:valor
◦ Los documentos están almacenados por una clave
◦ El sistema entiende la estructura arbitraria de los documentos
◦ Da soporte a listas, apuntadores a documentos y documentos anidados
◦ Permite crear índices secundarios además de índices sobre la clave
Modelo de datos
4
Modelo de datos - Estructuras
Base de
datos
•Contenedor físico de
colecciones o
documentos
Colecciones
•Agrupaciones de
documentos, no
todas las BD lo
tienen
Documento •Unidad básica de
datos en Json
Valores
•Atómicos
•Listas o arreglos
•Adjuntos (pdf, jpg, etc)
5
Caso de Estudio – Tipos de datos
6
Los definidos por Json
•String - Cadenas de caracteres.
•Integer - Números enteros.
•Double - Números con decimales.
•Boolean - Booleanos verdaderos o falsos.
•Date - Fechas.
•Timestamp - Marcas de tiempo.
•Null - Valor nulo.
•Array - Arreglos de otros tipos de dato.
•Object - Otros documentos embebidos.
•ObjectID - Identificadores únicos creados por MongoDB al
crear documentos sin especificar valores para el campo _id.
•Data Binaria - Punteros a archivos binarios.
•Javascript - código y funciones Javascript
Caso de Estudio – Patrones de
modelado
7
Existen 2 patrones principales para establecer la
estructura que tendrán los documentos para
relacionar datos que en una base de datos relacional
estarían en diferentes tablas.
Embeber
◦ Este patrón se enfoca en incrustar documentos uno dentro
de otro con la finalidad de hacerlo parte del mismo registro
y que la relación sea directa.
Referenciar
◦ Este patrón busca imitar el comportamiento de las claves
foráneas para relacionar datos que deben estar en
colecciones diferentes.
Caso de Estudio – Patrones de
modelado
8
Embeber
Persona= {
Nombre: 'Jonathan',
Apellido: 'Wiesel',
Genero: 'M',
Documentos: {
Pasaporte: 'D123456V7',
Licencia: '34567651-2342',
seguro_social: 'V-543523452' }
}
Relaciones 1:1
Caso de Estudio – Patrones de
modelado
9
Persona= {
Nombre: 'Jonathan',
Apellido: 'Wiesel',
Genero: 'M',
Direcciones:
[{ país: 'Venezuela',
estado: 'Distrito capital‘,
ciudad: 'Caracas',
urbanizacion: 'La Florida',
avenida: ...,
edificio: ...,
piso: ...,
apartamento: ... },
{ país: 'Estados Unidos',
estado: 'Florida‘,
ciudad: 'Miami‘,
urbanizacion: 'Aventura',
avenida: ...,
edificio: ..., piso: ...,
apartamento: ... }]
}
Relaciones 1:n Embeber
Caso de Estudio – Patrones de
modelado
10
Direccion1:
{ _id: 1
país: 'Venezuela',
estado: 'Distrito capital‘,
ciudad: 'Caracas',
urbanizacion: 'La Florida',
avenida: ...,
edificio: ...,
piso: ...,
apartamento: ... }
Direccion2:
{ _id: 2,
país: 'Estados Unidos',
estado: 'Florida‘,
ciudad: 'Miami‘,
urbanizacion: 'Aventura',
avenida: ...,
edificio: ..., piso: ...,
apartamento: ... }
Relaciones 1:n
Persona= {
Nombre: 'Jonathan',
Apellido: 'Wiesel',
Genero: 'M',
Direcciones: [1,2] }
Referenciar
Caso de Estudio – Patrones de
modelado
11
Relaciones n:m
Caso de Estudio – Patrones de
modelado
12
Direccion1:
{ _id: 1
país: 'Venezuela',
estado: 'Distrito capital‘,
ciudad: 'Caracas',
urbanizacion: 'La Florida',
avenida: ...,
edificio: ...,
piso: ...,
apartamento: ...
personas: [100,101] }
Direccion2:
{ _id: 2,
país: 'Estados Unidos',
estado: 'Florida‘,
ciudad: 'Miami‘,
urbanizacion: 'Aventura',
avenida: ...,
edificio: ..., piso: ...,
apartamento: ...
personas [100]}
Relaciones n:m
Persona1= {
_id 100
Nombre: 'Jonathan',
Apellido: 'Wiesel',
Genero: 'M',
Direcciones: [1,2] }
Persona2= {
_id 101
Nombre: ‘Carlos',
Apellido: ‘Cerqueira',
Genero: 'M',
Direcciones: [1] }
Caso de Estudio – Patrones de
modelado
13
Relaciones n:m
Atributo propio
Caso de Estudio – Patrones de
modelado
14
Direccion1:
{ _id: 1
país: 'Venezuela',
estado: 'Distrito capital‘,
ciudad: 'Caracas',
urbanizacion: 'La Florida',
avenida: ...,
edificio: ...,
piso: ...,
apartamento: ...
personas: [100,101] }
Direccion2:
{ _id: 2,
país: 'Estados Unidos',
estado: 'Florida‘,
ciudad: 'Miami‘,
urbanizacion: 'Aventura',
avenida: ...,
edificio: ..., piso: ...,
apartamento: ...
personas [100]}
Relaciones n:mPersona1= {
_id 100
Nombre: 'Jonathan',
Apellido: 'Wiesel',
Genero: 'M',
direcciones : [{
direccion_id : 1,
viveAqui : true
},{
direccion_id : 2,
viveAqui : false
}]}
Persona2= {
_id 101
Nombre: ‘Carlos',
Apellido: ‘Cerqueira',
Genero: 'M',
direcciones : [{
direccion_id : 1,
viveAqui : true
}] }
Distribución de los datos
Sharding automático:
◦ Por rango de clave, con servidor de metadata que mantiene
la ubicación de los rangos
◦ Hashing consistente
Almacenamiento
Si cada nodo tiene un conjunto de claves aleatorias,
internamente puede almacenarse de distintas
maneras:
◦ Tabla hash
◦ arboles B+ (Tokyo Cabinet)
Tipos de registros
◦ <key, value>
◦ Tupla<key, v1,. ., vn>
Operaciones
CRUD
◦ Create: Crea un nuevo documento
◦ Read: Lee uno o mas documentos
◦ Update: Actualiza un documento nuevo
◦ Delete: Elimina uno o más documentos
REST
◦ GET: Retorna un documento con un id dado
◦ PUT: Crea un nuevo documento o una nueva versión
◦ DELETE: Marca un documento como borrado
Map - Reduce
17
Técnicas usadas - ejemplos
Problema MongoDB CouchDB
Topología Cluster (maestro esclavo) Anillo
Sharding
Particionamiento por rango,
particionamiento por hash y splitting
Hashing Consistente DHT
Control de concurrencia
Bloqueo compartido (S) para lectura
y Exclusivo (X) para escritura con
intentos de bloqueo (IS e IX)
MVCC y relojes de vector con
reconciliación durante lecturas
Manejo de fallas temporales
Servidor de configuración
Sloppy Quorum y hinted handoff
Manejo de fallas permanentes
Replica sets maestro esclavo con
elección de nuevo maestro cuando
se presentan fallas
Anti- entropía con árboles Merkle
para Consistencia de Replicas
Nodos salientes o entrantes Sharded Collection Balancing
Protocolo de membresía basado en
Gossip y detección de fallas.
Búsquedas
Árboles B+ para Índices por clave y
secundarios
Árboles B+ para Índices por clave y
secundarios
Caso de Estudio
19
Viene de la palabra en inglés “humongous” que significa
enorme
Su desarrollo empezó en octubre de 2007 por la
compañía de software 10gen, aunque su lanzamiento fue
en el 2009
Es de código abierto, con licencia GNU AGPL (para SW de
red)
Última versión estable 3.2.8 el 12 de Julio de 2016
Guarda estructuras de datos en documentos
tipo JSON con un esquema dinámico (MongoDB llama
ese formato BSON)
https://docs.mongodb.org
Caso de Estudio- Operaciones
CRUD
◦ Create
20
Caso de estudio - Operaciones
CRUD
◦ Update
◦ Delete
21
Caso de Estudio - Consultas
22
En MongoDB una consulta se dirige a una colección específica de
documentos .
Las consultas especifican criterios o condiciones , que identifican
los documentos que MongoDB vuelve a los clientes
Una consulta puede incluir una proyección que especifica los
campos de los documentos
Opcionalmente, se puede imponer límites o criterios de
ordenación a las consultas.
Caso de Estudio - Operadores
23
Selección
◦ Comparación
◦ Lógicos
◦ Elementos
◦ Otros
Proyección
https://docs.mongodb.org/manual/reference/operator/query/
Consultas – Operadores de
comparación
24
Operador Descripción
$eq Documentos que coinciden con los valores que son iguales a un valor especificado
$gt Documentos que coinciden con los valores que son mayores a un valor especificado
$gte Documentos que coinciden con los valores que son mayores o iguales a un valor
especificado
$lt Documentos que coinciden con los valores que son menores a un valor especificado
$lte Documentos que coinciden con los valores que son menores o iguales a un valor
especificado
$ne Documentos que coinciden con los valores que no son iguales a un valor especificado
$in Documentos que coinciden con alguno de los valores especificados en un arreglo
$nin Documentos que no coinciden con ninguno de los valores especificados en un arreglo
Consultas – Operadores lógicos
25
Operador Descripción
$or Une a las cláusulas con un OR lógico y devuelve todos los documentos que coinciden
con las condiciones de cualquiera de las cláusulas
$and Une a las cláusulas con un OR lógico y devuelve todos los documentos que coinciden
con las condiciones de ambas cláusulas
$not Invierte el efecto de una condición retornando los documentos que no cumplen con la
condición
$nor Une a las cláusulas con un NOR lógico y devuelve todos los documentos no cumplan
con ambas cláusulas.
Consultas – Operadores de
Elementos
26
Operador Descripción
$exists Coincide con los documentos que tienen o no el campo especificado, recibe el
parámetro true o false
db.records.find( { album: { $exists: true } } )
Documentos que tienen el campo álbum
db.records.find( { autor: { $exists: false } } )
Documentos que no contienen el campo autor
$type Selecciona documentos donde el field es de un tipo BSON específico.
{ field: { $type: <BSON type number> | <String alias> } }
Consultas – Operadores de
Proyección
27
Operador Descripción
$exists Coincide con los documentos que tienen o no el campo especificado, recibe el
parámetro true o false
db.records.find( { album: { $exists: true } } )
Documentos que tienen el campo álbum
db.records.find( { autor: { $exists: false } } )
Documentos que no contienen el campo autor
$type Selecciona documentos donde el field es de un tipo BSON específico.
{ field: { $type: <BSON type number> | <String alias> } }
Caso de Estudio - Consultas
28
Caso de estudio- Índices
Los índices en MongoDB son a nivel de colección y
son similares a los índices en otros sistemas de base
de datos
◦ Índices primarios para _id (clave primaria): se crean por
defecto
◦ Índices secundarios para atributos en el documento
◦ Un solo campo
◦ Múltiples campos
29
db.users.createIndex({ “score" : 1 })
Caso de estudio - Índices
Múltiples campos (Índices compuestos): hace
referencia a múltiples campos en una colección de
documentos
◦ db.events.createIndex( { "username" : 1, "date" : -1 } )
Este índice soporta las siguientes consultas
◦ db.events.find().sort( { username: 1, date: -1 } )
◦ db.events.find().sort( { username: -1, date: 1 } )
30
Caso de estudio Almacenamiento
Mongo tiene 3 motores de almacenamiento
◦ WiredTiger. Es el motor de almacenamiento por defecto
de MongoDB desde la versión 3.2. Provee control de
concurrencia a nivel de documento.
◦ MMAPv1 es el motor original de almacenamiento
MongoDB y es el motor de almacenamiento por defecto
para las versiones MongoDB antes 3.2. Se desempeña bien
en las cargas de trabajo con altos volúmenes de lectura y
escritura, así como actualizaciones en el lugar.
◦ El Motor de almacenamiento "In-Memory" solo está
disponible en MongoDB Enterprice. En lugar de almacenar
documentos en el disco, se les retiene en memoria el mayor
tiempo de latencia de datos posible.
31
Caso de Estudio – Arquitectura
32
mongod es el proceso demonio primario para el
sistema de MongoDB. Se ocupa de las solicitudes
de datos , gestiona el acceso de datos, y realiza
operaciones de gestión en background.
Mongos para " MongoDB Shard", es un servicio
de enrutamiento para las configuraciones de
fragmento MongoDB que procesa las consultas
de la capa de aplicación , y determina la ubicación
de los datos en el clúster fragmentado, con el fin
de completar estas operaciones.
Config Server Mongos utiliza tres servidores de
configuración para almacenar los metadatos del
cluster, y los tres deben estar disponibles para
apoyar cambios que incluyen divisiones de chunks
y migraciones . Si uno de los servidores de
configuración no está disponible debe
reemplazarlo a la brevedad posible .
Caso de estudio - Replicación
Un conjunto de replica
◦ Es un grupo de instancias de mongod que mantiene el
mismo conjunto de datos, donde el primario recibe las
actualizaciones de los clientes quien las replica a los
secudarios
33
Caso de estudio - Replicación
Fallo del primario
◦ Automaticamente se elige como primario a uno de los
secundarios
34
Caso de estudio - Replicación
Si el nodo se recupera
◦ Pasa a ser secundario
35
Caso de estudio - Sharding
Divide el conjunto de datos y distribuye los datos a
través de múltiples servidores o fragmentos .
◦ Cada fragmento es una base de datos independiente ,
◦ y colectivamente , los fragmentos forman una sola base de
datos lógica.
36
Caso de estudio - Sharding
37
Escalabilidad para escribir
Key Range
0..100
mongod
mongod mongod
Key Range
0..50
Key Range
51..100
Caso de estudio - Sharding
38
mongod mongod mongod mongod
Key Range
0..25
Key Range
26..50
Key Range
51..75
Key Range
76.. 100
Escalabilidad para escribir
Caso de estudio - Sharding
39
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Key Range
0..25
Key Range
26..50
Key Range
51..75
Key Range
76.. 100
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Key Range
0..25
Key Range
26..50
Key Range
51..75
Key Range
76.. 100
MongoS MongoS MongoS
Aplicación
Caso de estudio - Sharding
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Primary
Secondary
Secondary
Key Range
0..25
Key Range
26..50
Key Range
51..75
Key Range
76.. 100
MongoS MongoS MongoS
Config
Config
Config
Aplicación
Caso de estudio - Sharding
Caso de estudio - Splitting
42
Splitting o división es un proceso en background que
asegura que los datos almacenados no excedan un
tamaño específico Mongo divide los datos en trozos
(chunks). Cuando un trozo crece más allá de un
tamaño especificado, MongoDB lo divide por la
mitad y distribuye los trozos en un servidor de
fragmentos.
Caso de estudio - Splitting
43
GridFS: Especificación para almacenar y recuperar
archivos (documentos) que excedan el tamaño límite
de documento Bson de 16MB
◦ Divide el archivo en pedazos o chunks, por defecto de 255
KB
◦ Usa dos coleccciones para almacenar los datos
◦ En una se almacenan los chunks
◦ En otra se almacena la metadata
◦ https://docs.mongodb.org/manual/core/gridfs/
Caso de estudio - Seguridad
44
MongoDB provee control de acceso basado en
usuario o en Roles
db.createUser(
{
user: "reportsUser",
pwd: "12345678",
roles: [
{ role: "read", db: "reporting" },
{ role: "read", db: "products" },
{ role: "read", db: "sales" },
{ role: "readWrite", db: "accounts" }
]
}
)
db.createRole(
{
role: "mongostatRole",
privileges: [
{ resource: { cluster: true },
actions: [ "serverStatus" ] }
],
roles: []
}
)
Caso de estudio - Seguridad
45
Para asignar un Rol a un usuario
db.grantRolesToUser(
"reportsUser",
[
{ role: "readWrite", db: "products" } ,
{ role: "readAnyDatabase", db:"admin" }
]
)
Tambien permite el uso de un proxy a través del protocolo
LDAP
Caso de estudio – Quienes usan
46
Caso de estudio – Consultas
avanzadas
Consultas con arreglo de documentos:
◦ La siguiente operación devuelve documentos de la
colección bios donde un arreglo premios contiene un
elemento de documento incrustado que contiene el campo
premio igual al "Premio Turing" y el campo de año mayor a
1980:
db.bios.find(
{ awards: {
$elemMatch: {
award: "Turing Award",
year: { $gt: 1980 }
}
}
}
)
Caso de estudio – Consultas
avanzadas
Consultas con documentos embebidos
◦ La siguiente operación devuelve documentos de la
colección bios donde el documento embebido name es
exactamente { first: "Yukihiro", last: "Matsumoto" }
db.bios.find(
{
name: {
first: "Yukihiro",
last: "Matsumoto"
}
}
)
db.bios.find(
{
"name.first": "Yukihiro",
"name.last": "Matsumoto"
}
)
Caso de estudio – Consultas
avanzadas
Cursores:
◦ El método db.collection.find() consulta una colección y
retorna un cursor a los documentos resultantes
◦ Para acceder a los documentos se necesita iterar el cursor
var myCursor = db.inventory.find();
var myFirstDocument = myCursor.hasNext() ? myCursor.next() :
null;
myCursor.objsLeftInBatch();
http://docs.mongodb.org/manual/core/cursors/
Caso de estudio – Consultas
avanzadas
Agregación: operaciones que procesan registros de
datos y retornan resultados calculados
Posee tres formas de agregación
◦ Pipeline de agregación: framework para llevar a cabo
tareas de agregación. Modelado en el concepto de pipelines
de procesamiento de datos
◦ Map-Reduce: Operaciones con dos fasos Map y Reduce. Usa
funciones de Javascript
◦ Operaciones de agregación de propósito simple: comandos
de base de datos de propósito especial
Caso de estudio – Consultas
avanzadas
Pipeline de agregación: Es una serie de transformación de
Documentos
◦ Se ejecuta en estapas (stages)
◦ La entrada original es una colección
◦ Las salidas son documentos, cursores o colecciones
◦ Escrito en C++
◦ Trabaja bien con Shardings
http://www.slideshare.net/mongodb/aggregation-framework-36715147
$match $project $group $sort
Pipeline de agregación – algunas
etapas
 $match: fitra documentos
 $project: agrega o elimina
columnas en el documento
 $group: aplica operaciones
de agrupación a cada grupo
de documentos ($sum,
$avg, $min, $max, etc)
 $unwind: convierte
documentos en una matriz
con ciertas características
 $sort: ordena los documentos
 $limit /$skip: página los
documentos
 $geoNear: ordena los
documentos por proximidad
geográfica
 $lookup: realiza un left outer
join con otra colección en la
misma base de datos
http://www.slideshare.net/mongodb/aggregation-framework-36715147
Pipeline de agregación - etapas
Ejemplo:
http://www.slideshare.net/mongodb/aggregation-framework-36715147
Pipeline de agregación - etapas
Ejemplo lookup:
http://www.slideshare.net/mongodb/aggregation-framework-36715147
Pipeline de agregación – Ejemplo
lookup
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#pipe._S_lookup
Pipeline de agregación – Ejemplo
lookup
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#pipe._S_lookup
Caso de estudio – Consultas
avanzadas
◦ Map-Reduce:
Map: procesa
cada documento
y emite uno o
dos objetos y
Reduce: combina
la salida de la
operación Map.
Caso de estudio – Consultas
avanzadas
Operaciones de agregación de propósito simple:
comandos de base de datos de propósito especial
◦ Count: cuenta los elementos de una colección que cumplen
la condición de la consulta
◦ db.collection.count(consulta)
◦ db.collection.find(consulta).count()
◦ Disctint: Encuentra los valores diferentes de un campo
◦ db.collection.distinct(campo, consulta)
◦ Group
Caso de estudio – Consultas
avanzadas
db.collection.group({ key, reduce, initial [, keyf] [, cond] [, finalize] })
key documento
Campo o campos a agrupar. Retorna una “key object” para usar como la
clave de agrupamiento.
reduce función
Una función de agregación que opera sobre los documentos durante la
operación de agrupamiento. Puede retornar una suma o un conteo. Toma
dos argumentos: el actual documento y un documento resultado de la
agregación para el grupo.
initial Documento documento resultado de la agregación inicial
keyf Función
Opcional. Alternativa al campo clave. Especifica una funcion que crea un
“key object” para usar como clave de agrupamiento. Use keyf en lugar
de key para agrupar por campos calculados.
cond Documento
Criterios de selección para determinar qué documentos de la colección
procesar. Si se omite, se procesarán todos los documentos de la colección
para la operación del grupo.
finalize función
Opcional. Una función que ejecuta cada elemento en el conjunto de
resultados antes de que db.collection.group () devuelve el valor final. Esta
función puede o bien modificar el documento resultado o sustituir el
documento resultado como un todo.
Caso de estudio – Consultas
avanzadas - Explain
◦ Retorna informacion del plan de consulta para las
siguientes operaciones:
◦ aggregate(); count(); find(); group(); remove(); and update() methods.
◦ db.collection.explain().<method(...)>
◦ Presenta el plan de consulta (query plan) como un árbol de
etapas.
◦ Cada etapa pasa sus resultados (es decir, documentos o claves de índice) al
nodo padre.
◦ Los nodos hoja acceden a la colección o los índices.
◦ Los nodos internos manipulan los documentos o las claves de índice que se
derivan de los nodos secundarios.
◦ El nodo raíz es la etapa final de la que MongoDB deriva del conjunto de
resultados
Caso de estudio – Consultas
avanzadas - Explain
◦ Algunas de las operaciones del plan son:
◦ COLLSCAN Scan de una coleccion
◦ IXSCAN para búsqueda en el índice
◦ FETCH para recuperación de documentos
◦ SHARD_MERGE para mezclar results de fragmentos
◦ El explain tiene los siguientes parámetros opcionales
(modos de verbosity)
◦ queryPlanner: es el modo por defecto, retorna solamente el plan de consulta
◦ executionStats: muestra el plan de consulta e información de ejecución
◦ allPlansExecution: muestra todos los posibles planes de ejecución.
Caso de estudio – Consultas
avanzadas - Explain
Ejemplos
◦ db.products.explain().count( { quantity: { $gt: 50 } } )
◦ Retorna solo el plan de consulta
◦ db.products.explain("executionStats").find(
{ quantity: { $gt: 50 }, category: "apparel" }
)
◦ Retorna el plan de consulta y información de ejecución
◦ db.products.explain("allPlansExecution").update(
{ quantity: { $lt: 1000}, category: "apparel" },
{ $set: { reorder: true } }
)
◦ No modifica los datos pero retorna todos los posibles planes de ejecución
Caso de estudio – respaldos
Respaldo por copia de datos subyacentes:
◦ Se trata de una copia de snapshot en un punto del tiempo, sin
embargo no depende de mongo sino del sistema operativo.
mongodump - mongorestore
◦ mongodump: lee datos de una base de datos y crea archivos
Bson de alta fidelidad
◦ mogorestore: restaura una base de datos desde un archivo Bson.
mongoimport – mongoexport
◦ mongoexport es una utilidad que produce una exportación Json
o CSV de los datos almacenados en una instancia de MongoDB.
◦ mongoimport importa el contenido de un archivo Json o CSV
creado por mongoexport u otra herramienta de terceros.
Caso de estudio – Usos
Cualquier aplicación que necesite almacenar datos
semi estructurados
Algunos casos de uso
◦ Almacenamiento y registro de eventos
◦ Manejo de documentos y contenido
◦ Comercio Electrónico
◦ Alto volúmenes de lectura
◦ Aplicaciones móviles
◦ Manejo de contenido
◦ Almacenamiento de comentario
Próxima clase
BD Familia de columnas:
◦ Modelo de datos
◦ Operaciones
◦ Técnicas usadas
◦ Caso de estudio

Más contenido relacionado

PDF
An introduction to MongoDB
PDF
An introduction to MongoDB
PPTX
Que es MongoDB
PDF
04 Introduction au logiciel R
PDF
MongoDB et Elasticsearch, meilleurs ennemis ?
PDF
Inside the InfluxDB storage engine
PDF
MongoDB Fundamentals
PPTX
The Basics of MongoDB
An introduction to MongoDB
An introduction to MongoDB
Que es MongoDB
04 Introduction au logiciel R
MongoDB et Elasticsearch, meilleurs ennemis ?
Inside the InfluxDB storage engine
MongoDB Fundamentals
The Basics of MongoDB

La actualidad más candente (20)

PPTX
Elasticsearch
PPTX
MongoDB
PPTX
introduction à MongoDB
PDF
Webinar: Working with Graph Data in MongoDB
PDF
Introduction to Cassandra
PDF
Poo en c++ les relations entre classes
PPTX
Mongodb basics and architecture
PPTX
Mongo db
PPTX
Bd nosql clave valor
PPTX
php2 : formulaire-session-PDO
PDF
MongodB Internals
PDF
Simplify and Scale Data Engineering Pipelines with Delta Lake
ODP
Ckan tutorial odw2013 131109
PPT
Introduction to mongodb
PPTX
NoSQL - MongoDB
PDF
Postgresql 12 streaming replication hol
PDF
Introduction au langage SQL
PDF
Alphorm.com Formation PL/SQL
PDF
PDF
Programmation orientée objet en PHP 5
Elasticsearch
MongoDB
introduction à MongoDB
Webinar: Working with Graph Data in MongoDB
Introduction to Cassandra
Poo en c++ les relations entre classes
Mongodb basics and architecture
Mongo db
Bd nosql clave valor
php2 : formulaire-session-PDO
MongodB Internals
Simplify and Scale Data Engineering Pipelines with Delta Lake
Ckan tutorial odw2013 131109
Introduction to mongodb
NoSQL - MongoDB
Postgresql 12 streaming replication hol
Introduction au langage SQL
Alphorm.com Formation PL/SQL
Programmation orientée objet en PHP 5
Publicidad

Destacado (20)

PPTX
Bd nosql tecnicas III
PPTX
Bd no sql conceptos basicos
PPTX
Bd no sql tecnicas2
PPTX
Introducción mongodb y desarrollo
PPTX
PDF
Oopphp5
PDF
NoSql y MongoDB
PDF
Introducción al mundo NoSQL
PDF
Un acercamiento a las bases de datos NoSQL
PDF
NoSQL: Introducción a las Bases de Datos no estructuradas
PDF
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
PDF
2009 Beac Annual Meeting
PDF
описание игры акции
PDF
Et你成功了 Slide
PPTX
LXE's new VX8 Kärv & VX9 Förj
 
PDF
Amazon
PPT
Blood Drive
PPS
Εκπαιδευτικό Σύστημα
PPTX
All S Ta R Cardinals
PPT
Cuento El Leon Y La Hormiga
Bd nosql tecnicas III
Bd no sql conceptos basicos
Bd no sql tecnicas2
Introducción mongodb y desarrollo
Oopphp5
NoSql y MongoDB
Introducción al mundo NoSQL
Un acercamiento a las bases de datos NoSQL
NoSQL: Introducción a las Bases de Datos no estructuradas
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
2009 Beac Annual Meeting
описание игры акции
Et你成功了 Slide
LXE's new VX8 Kärv & VX9 Förj
 
Amazon
Blood Drive
Εκπαιδευτικό Σύστημα
All S Ta R Cardinals
Cuento El Leon Y La Hormiga
Publicidad

Similar a Bd no sq ldocumento (20)

PPTX
Jean piere sarumo mongodb
PDF
PPTX
MongoDB.basededatos-nosql-basenorelacion
PPTX
GESTION DE CON Mongo DB UNA REVISON GENERAL
PDF
Presentación sobre Bases de Datos NoSQL Sesion2
PDF
Seminario mongo db springdata 10-11-2011
PPTX
Ultisgbd
PPTX
Persistencia-NoSQL-y-MongoDB-v-2018.02-Prof.-L.-Straccia.pptx
PPTX
PDF
Greach 2011 - Engrandeciendo Grails con Mongo DB
PDF
Mi primera aplicación con MongoDB
PPT
Webinario Operaciones Básicas MongoDB
PPTX
NOSQL: Primeros Pasos en MongoDB
PPTX
1 tutorial de mongo db
KEY
Creating Productive Workshops in Scary Situations
PDF
Clase No.6 - MONGODB base de datos-01.pdf
PPTX
Bd no sql
PPT
Mongo db course introduction
PDF
Tema principal de Mongodb y sus beneficios
Jean piere sarumo mongodb
MongoDB.basededatos-nosql-basenorelacion
GESTION DE CON Mongo DB UNA REVISON GENERAL
Presentación sobre Bases de Datos NoSQL Sesion2
Seminario mongo db springdata 10-11-2011
Ultisgbd
Persistencia-NoSQL-y-MongoDB-v-2018.02-Prof.-L.-Straccia.pptx
Greach 2011 - Engrandeciendo Grails con Mongo DB
Mi primera aplicación con MongoDB
Webinario Operaciones Básicas MongoDB
NOSQL: Primeros Pasos en MongoDB
1 tutorial de mongo db
Creating Productive Workshops in Scary Situations
Clase No.6 - MONGODB base de datos-01.pdf
Bd no sql
Mongo db course introduction
Tema principal de Mongodb y sus beneficios

Más de Escuela de Computación UCV (20)

PPT
Recuperacion ABD UCV
PPT
Concurrencia 2 ABD UCV
PPT
Concurrencia 1 ABD UCV
PPT
Integridad de datos
PPT
Seguridad datos i
PPT
Seguridad datos ii vii
PPT
Abd manejo memoria III
PPT
Abd manejo memoria II
PPT
Abd manejo memoria Parte I
PPTX
Bd no sql tecnicas
PPTX
Abd procesamiento consultas (parte 3)
PPT
Abd procesamiento consultas (parte2)
PPT
Abd procesamiento consultas (parte1)
PPTX
Abd tema1 parteii
PPTX
Abd procesamiento consultas
PPTX
PPTX
PPTX
Recuperacion ABD UCV
Concurrencia 2 ABD UCV
Concurrencia 1 ABD UCV
Integridad de datos
Seguridad datos i
Seguridad datos ii vii
Abd manejo memoria III
Abd manejo memoria II
Abd manejo memoria Parte I
Bd no sql tecnicas
Abd procesamiento consultas (parte 3)
Abd procesamiento consultas (parte2)
Abd procesamiento consultas (parte1)
Abd tema1 parteii
Abd procesamiento consultas

Último (20)

PDF
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
PDF
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
PDF
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
PDF
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
1. Intrdoduccion y criterios de seleccion de Farm 2024.pdf
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
PDF
biología es un libro sobre casi todo el tema de biología
PDF
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PDF
Atencion prenatal. Ginecologia y obsetricia
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
caso clínico iam clinica y semiología l3.pptx
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
Escuelas Desarmando una mirada subjetiva a la educación
1. Intrdoduccion y criterios de seleccion de Farm 2024.pdf
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
biología es un libro sobre casi todo el tema de biología
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
Atencion prenatal. Ginecologia y obsetricia

Bd no sq ldocumento

  • 1. Bd NoSQL Documentos PROFA. MERCY OSPINA mercy.ospinat@gmail.com
  • 2. Agenda Modelo de datos Operaciones Técnicas usadas Cuando usar Caso de estudio
  • 3. Modelo de datos Un documento auto descrito que puede estar en formato Json o XML Un documento Json (los mas usados) ◦ Es un conjunto de clave:valor o arreglos de clave:valor ◦ Los documentos están almacenados por una clave ◦ El sistema entiende la estructura arbitraria de los documentos ◦ Da soporte a listas, apuntadores a documentos y documentos anidados ◦ Permite crear índices secundarios además de índices sobre la clave
  • 5. Modelo de datos - Estructuras Base de datos •Contenedor físico de colecciones o documentos Colecciones •Agrupaciones de documentos, no todas las BD lo tienen Documento •Unidad básica de datos en Json Valores •Atómicos •Listas o arreglos •Adjuntos (pdf, jpg, etc) 5
  • 6. Caso de Estudio – Tipos de datos 6 Los definidos por Json •String - Cadenas de caracteres. •Integer - Números enteros. •Double - Números con decimales. •Boolean - Booleanos verdaderos o falsos. •Date - Fechas. •Timestamp - Marcas de tiempo. •Null - Valor nulo. •Array - Arreglos de otros tipos de dato. •Object - Otros documentos embebidos. •ObjectID - Identificadores únicos creados por MongoDB al crear documentos sin especificar valores para el campo _id. •Data Binaria - Punteros a archivos binarios. •Javascript - código y funciones Javascript
  • 7. Caso de Estudio – Patrones de modelado 7 Existen 2 patrones principales para establecer la estructura que tendrán los documentos para relacionar datos que en una base de datos relacional estarían en diferentes tablas. Embeber ◦ Este patrón se enfoca en incrustar documentos uno dentro de otro con la finalidad de hacerlo parte del mismo registro y que la relación sea directa. Referenciar ◦ Este patrón busca imitar el comportamiento de las claves foráneas para relacionar datos que deben estar en colecciones diferentes.
  • 8. Caso de Estudio – Patrones de modelado 8 Embeber Persona= { Nombre: 'Jonathan', Apellido: 'Wiesel', Genero: 'M', Documentos: { Pasaporte: 'D123456V7', Licencia: '34567651-2342', seguro_social: 'V-543523452' } } Relaciones 1:1
  • 9. Caso de Estudio – Patrones de modelado 9 Persona= { Nombre: 'Jonathan', Apellido: 'Wiesel', Genero: 'M', Direcciones: [{ país: 'Venezuela', estado: 'Distrito capital‘, ciudad: 'Caracas', urbanizacion: 'La Florida', avenida: ..., edificio: ..., piso: ..., apartamento: ... }, { país: 'Estados Unidos', estado: 'Florida‘, ciudad: 'Miami‘, urbanizacion: 'Aventura', avenida: ..., edificio: ..., piso: ..., apartamento: ... }] } Relaciones 1:n Embeber
  • 10. Caso de Estudio – Patrones de modelado 10 Direccion1: { _id: 1 país: 'Venezuela', estado: 'Distrito capital‘, ciudad: 'Caracas', urbanizacion: 'La Florida', avenida: ..., edificio: ..., piso: ..., apartamento: ... } Direccion2: { _id: 2, país: 'Estados Unidos', estado: 'Florida‘, ciudad: 'Miami‘, urbanizacion: 'Aventura', avenida: ..., edificio: ..., piso: ..., apartamento: ... } Relaciones 1:n Persona= { Nombre: 'Jonathan', Apellido: 'Wiesel', Genero: 'M', Direcciones: [1,2] } Referenciar
  • 11. Caso de Estudio – Patrones de modelado 11 Relaciones n:m
  • 12. Caso de Estudio – Patrones de modelado 12 Direccion1: { _id: 1 país: 'Venezuela', estado: 'Distrito capital‘, ciudad: 'Caracas', urbanizacion: 'La Florida', avenida: ..., edificio: ..., piso: ..., apartamento: ... personas: [100,101] } Direccion2: { _id: 2, país: 'Estados Unidos', estado: 'Florida‘, ciudad: 'Miami‘, urbanizacion: 'Aventura', avenida: ..., edificio: ..., piso: ..., apartamento: ... personas [100]} Relaciones n:m Persona1= { _id 100 Nombre: 'Jonathan', Apellido: 'Wiesel', Genero: 'M', Direcciones: [1,2] } Persona2= { _id 101 Nombre: ‘Carlos', Apellido: ‘Cerqueira', Genero: 'M', Direcciones: [1] }
  • 13. Caso de Estudio – Patrones de modelado 13 Relaciones n:m Atributo propio
  • 14. Caso de Estudio – Patrones de modelado 14 Direccion1: { _id: 1 país: 'Venezuela', estado: 'Distrito capital‘, ciudad: 'Caracas', urbanizacion: 'La Florida', avenida: ..., edificio: ..., piso: ..., apartamento: ... personas: [100,101] } Direccion2: { _id: 2, país: 'Estados Unidos', estado: 'Florida‘, ciudad: 'Miami‘, urbanizacion: 'Aventura', avenida: ..., edificio: ..., piso: ..., apartamento: ... personas [100]} Relaciones n:mPersona1= { _id 100 Nombre: 'Jonathan', Apellido: 'Wiesel', Genero: 'M', direcciones : [{ direccion_id : 1, viveAqui : true },{ direccion_id : 2, viveAqui : false }]} Persona2= { _id 101 Nombre: ‘Carlos', Apellido: ‘Cerqueira', Genero: 'M', direcciones : [{ direccion_id : 1, viveAqui : true }] }
  • 15. Distribución de los datos Sharding automático: ◦ Por rango de clave, con servidor de metadata que mantiene la ubicación de los rangos ◦ Hashing consistente
  • 16. Almacenamiento Si cada nodo tiene un conjunto de claves aleatorias, internamente puede almacenarse de distintas maneras: ◦ Tabla hash ◦ arboles B+ (Tokyo Cabinet) Tipos de registros ◦ <key, value> ◦ Tupla<key, v1,. ., vn>
  • 17. Operaciones CRUD ◦ Create: Crea un nuevo documento ◦ Read: Lee uno o mas documentos ◦ Update: Actualiza un documento nuevo ◦ Delete: Elimina uno o más documentos REST ◦ GET: Retorna un documento con un id dado ◦ PUT: Crea un nuevo documento o una nueva versión ◦ DELETE: Marca un documento como borrado Map - Reduce 17
  • 18. Técnicas usadas - ejemplos Problema MongoDB CouchDB Topología Cluster (maestro esclavo) Anillo Sharding Particionamiento por rango, particionamiento por hash y splitting Hashing Consistente DHT Control de concurrencia Bloqueo compartido (S) para lectura y Exclusivo (X) para escritura con intentos de bloqueo (IS e IX) MVCC y relojes de vector con reconciliación durante lecturas Manejo de fallas temporales Servidor de configuración Sloppy Quorum y hinted handoff Manejo de fallas permanentes Replica sets maestro esclavo con elección de nuevo maestro cuando se presentan fallas Anti- entropía con árboles Merkle para Consistencia de Replicas Nodos salientes o entrantes Sharded Collection Balancing Protocolo de membresía basado en Gossip y detección de fallas. Búsquedas Árboles B+ para Índices por clave y secundarios Árboles B+ para Índices por clave y secundarios
  • 19. Caso de Estudio 19 Viene de la palabra en inglés “humongous” que significa enorme Su desarrollo empezó en octubre de 2007 por la compañía de software 10gen, aunque su lanzamiento fue en el 2009 Es de código abierto, con licencia GNU AGPL (para SW de red) Última versión estable 3.2.8 el 12 de Julio de 2016 Guarda estructuras de datos en documentos tipo JSON con un esquema dinámico (MongoDB llama ese formato BSON) https://docs.mongodb.org
  • 20. Caso de Estudio- Operaciones CRUD ◦ Create 20
  • 21. Caso de estudio - Operaciones CRUD ◦ Update ◦ Delete 21
  • 22. Caso de Estudio - Consultas 22 En MongoDB una consulta se dirige a una colección específica de documentos . Las consultas especifican criterios o condiciones , que identifican los documentos que MongoDB vuelve a los clientes Una consulta puede incluir una proyección que especifica los campos de los documentos Opcionalmente, se puede imponer límites o criterios de ordenación a las consultas.
  • 23. Caso de Estudio - Operadores 23 Selección ◦ Comparación ◦ Lógicos ◦ Elementos ◦ Otros Proyección https://docs.mongodb.org/manual/reference/operator/query/
  • 24. Consultas – Operadores de comparación 24 Operador Descripción $eq Documentos que coinciden con los valores que son iguales a un valor especificado $gt Documentos que coinciden con los valores que son mayores a un valor especificado $gte Documentos que coinciden con los valores que son mayores o iguales a un valor especificado $lt Documentos que coinciden con los valores que son menores a un valor especificado $lte Documentos que coinciden con los valores que son menores o iguales a un valor especificado $ne Documentos que coinciden con los valores que no son iguales a un valor especificado $in Documentos que coinciden con alguno de los valores especificados en un arreglo $nin Documentos que no coinciden con ninguno de los valores especificados en un arreglo
  • 25. Consultas – Operadores lógicos 25 Operador Descripción $or Une a las cláusulas con un OR lógico y devuelve todos los documentos que coinciden con las condiciones de cualquiera de las cláusulas $and Une a las cláusulas con un OR lógico y devuelve todos los documentos que coinciden con las condiciones de ambas cláusulas $not Invierte el efecto de una condición retornando los documentos que no cumplen con la condición $nor Une a las cláusulas con un NOR lógico y devuelve todos los documentos no cumplan con ambas cláusulas.
  • 26. Consultas – Operadores de Elementos 26 Operador Descripción $exists Coincide con los documentos que tienen o no el campo especificado, recibe el parámetro true o false db.records.find( { album: { $exists: true } } ) Documentos que tienen el campo álbum db.records.find( { autor: { $exists: false } } ) Documentos que no contienen el campo autor $type Selecciona documentos donde el field es de un tipo BSON específico. { field: { $type: <BSON type number> | <String alias> } }
  • 27. Consultas – Operadores de Proyección 27 Operador Descripción $exists Coincide con los documentos que tienen o no el campo especificado, recibe el parámetro true o false db.records.find( { album: { $exists: true } } ) Documentos que tienen el campo álbum db.records.find( { autor: { $exists: false } } ) Documentos que no contienen el campo autor $type Selecciona documentos donde el field es de un tipo BSON específico. { field: { $type: <BSON type number> | <String alias> } }
  • 28. Caso de Estudio - Consultas 28
  • 29. Caso de estudio- Índices Los índices en MongoDB son a nivel de colección y son similares a los índices en otros sistemas de base de datos ◦ Índices primarios para _id (clave primaria): se crean por defecto ◦ Índices secundarios para atributos en el documento ◦ Un solo campo ◦ Múltiples campos 29 db.users.createIndex({ “score" : 1 })
  • 30. Caso de estudio - Índices Múltiples campos (Índices compuestos): hace referencia a múltiples campos en una colección de documentos ◦ db.events.createIndex( { "username" : 1, "date" : -1 } ) Este índice soporta las siguientes consultas ◦ db.events.find().sort( { username: 1, date: -1 } ) ◦ db.events.find().sort( { username: -1, date: 1 } ) 30
  • 31. Caso de estudio Almacenamiento Mongo tiene 3 motores de almacenamiento ◦ WiredTiger. Es el motor de almacenamiento por defecto de MongoDB desde la versión 3.2. Provee control de concurrencia a nivel de documento. ◦ MMAPv1 es el motor original de almacenamiento MongoDB y es el motor de almacenamiento por defecto para las versiones MongoDB antes 3.2. Se desempeña bien en las cargas de trabajo con altos volúmenes de lectura y escritura, así como actualizaciones en el lugar. ◦ El Motor de almacenamiento "In-Memory" solo está disponible en MongoDB Enterprice. En lugar de almacenar documentos en el disco, se les retiene en memoria el mayor tiempo de latencia de datos posible. 31
  • 32. Caso de Estudio – Arquitectura 32 mongod es el proceso demonio primario para el sistema de MongoDB. Se ocupa de las solicitudes de datos , gestiona el acceso de datos, y realiza operaciones de gestión en background. Mongos para " MongoDB Shard", es un servicio de enrutamiento para las configuraciones de fragmento MongoDB que procesa las consultas de la capa de aplicación , y determina la ubicación de los datos en el clúster fragmentado, con el fin de completar estas operaciones. Config Server Mongos utiliza tres servidores de configuración para almacenar los metadatos del cluster, y los tres deben estar disponibles para apoyar cambios que incluyen divisiones de chunks y migraciones . Si uno de los servidores de configuración no está disponible debe reemplazarlo a la brevedad posible .
  • 33. Caso de estudio - Replicación Un conjunto de replica ◦ Es un grupo de instancias de mongod que mantiene el mismo conjunto de datos, donde el primario recibe las actualizaciones de los clientes quien las replica a los secudarios 33
  • 34. Caso de estudio - Replicación Fallo del primario ◦ Automaticamente se elige como primario a uno de los secundarios 34
  • 35. Caso de estudio - Replicación Si el nodo se recupera ◦ Pasa a ser secundario 35
  • 36. Caso de estudio - Sharding Divide el conjunto de datos y distribuye los datos a través de múltiples servidores o fragmentos . ◦ Cada fragmento es una base de datos independiente , ◦ y colectivamente , los fragmentos forman una sola base de datos lógica. 36
  • 37. Caso de estudio - Sharding 37 Escalabilidad para escribir Key Range 0..100 mongod mongod mongod Key Range 0..50 Key Range 51..100
  • 38. Caso de estudio - Sharding 38 mongod mongod mongod mongod Key Range 0..25 Key Range 26..50 Key Range 51..75 Key Range 76.. 100 Escalabilidad para escribir
  • 39. Caso de estudio - Sharding 39 Primary Secondary Secondary Primary Secondary Secondary Primary Secondary Secondary Primary Secondary Secondary Key Range 0..25 Key Range 26..50 Key Range 51..75 Key Range 76.. 100
  • 41. Primary Secondary Secondary Primary Secondary Secondary Primary Secondary Secondary Primary Secondary Secondary Key Range 0..25 Key Range 26..50 Key Range 51..75 Key Range 76.. 100 MongoS MongoS MongoS Config Config Config Aplicación Caso de estudio - Sharding
  • 42. Caso de estudio - Splitting 42 Splitting o división es un proceso en background que asegura que los datos almacenados no excedan un tamaño específico Mongo divide los datos en trozos (chunks). Cuando un trozo crece más allá de un tamaño especificado, MongoDB lo divide por la mitad y distribuye los trozos en un servidor de fragmentos.
  • 43. Caso de estudio - Splitting 43 GridFS: Especificación para almacenar y recuperar archivos (documentos) que excedan el tamaño límite de documento Bson de 16MB ◦ Divide el archivo en pedazos o chunks, por defecto de 255 KB ◦ Usa dos coleccciones para almacenar los datos ◦ En una se almacenan los chunks ◦ En otra se almacena la metadata ◦ https://docs.mongodb.org/manual/core/gridfs/
  • 44. Caso de estudio - Seguridad 44 MongoDB provee control de acceso basado en usuario o en Roles db.createUser( { user: "reportsUser", pwd: "12345678", roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } ) db.createRole( { role: "mongostatRole", privileges: [ { resource: { cluster: true }, actions: [ "serverStatus" ] } ], roles: [] } )
  • 45. Caso de estudio - Seguridad 45 Para asignar un Rol a un usuario db.grantRolesToUser( "reportsUser", [ { role: "readWrite", db: "products" } , { role: "readAnyDatabase", db:"admin" } ] ) Tambien permite el uso de un proxy a través del protocolo LDAP
  • 46. Caso de estudio – Quienes usan 46
  • 47. Caso de estudio – Consultas avanzadas Consultas con arreglo de documentos: ◦ La siguiente operación devuelve documentos de la colección bios donde un arreglo premios contiene un elemento de documento incrustado que contiene el campo premio igual al "Premio Turing" y el campo de año mayor a 1980: db.bios.find( { awards: { $elemMatch: { award: "Turing Award", year: { $gt: 1980 } } } } )
  • 48. Caso de estudio – Consultas avanzadas Consultas con documentos embebidos ◦ La siguiente operación devuelve documentos de la colección bios donde el documento embebido name es exactamente { first: "Yukihiro", last: "Matsumoto" } db.bios.find( { name: { first: "Yukihiro", last: "Matsumoto" } } ) db.bios.find( { "name.first": "Yukihiro", "name.last": "Matsumoto" } )
  • 49. Caso de estudio – Consultas avanzadas Cursores: ◦ El método db.collection.find() consulta una colección y retorna un cursor a los documentos resultantes ◦ Para acceder a los documentos se necesita iterar el cursor var myCursor = db.inventory.find(); var myFirstDocument = myCursor.hasNext() ? myCursor.next() : null; myCursor.objsLeftInBatch(); http://docs.mongodb.org/manual/core/cursors/
  • 50. Caso de estudio – Consultas avanzadas Agregación: operaciones que procesan registros de datos y retornan resultados calculados Posee tres formas de agregación ◦ Pipeline de agregación: framework para llevar a cabo tareas de agregación. Modelado en el concepto de pipelines de procesamiento de datos ◦ Map-Reduce: Operaciones con dos fasos Map y Reduce. Usa funciones de Javascript ◦ Operaciones de agregación de propósito simple: comandos de base de datos de propósito especial
  • 51. Caso de estudio – Consultas avanzadas Pipeline de agregación: Es una serie de transformación de Documentos ◦ Se ejecuta en estapas (stages) ◦ La entrada original es una colección ◦ Las salidas son documentos, cursores o colecciones ◦ Escrito en C++ ◦ Trabaja bien con Shardings http://www.slideshare.net/mongodb/aggregation-framework-36715147 $match $project $group $sort
  • 52. Pipeline de agregación – algunas etapas  $match: fitra documentos  $project: agrega o elimina columnas en el documento  $group: aplica operaciones de agrupación a cada grupo de documentos ($sum, $avg, $min, $max, etc)  $unwind: convierte documentos en una matriz con ciertas características  $sort: ordena los documentos  $limit /$skip: página los documentos  $geoNear: ordena los documentos por proximidad geográfica  $lookup: realiza un left outer join con otra colección en la misma base de datos http://www.slideshare.net/mongodb/aggregation-framework-36715147
  • 53. Pipeline de agregación - etapas Ejemplo: http://www.slideshare.net/mongodb/aggregation-framework-36715147
  • 54. Pipeline de agregación - etapas Ejemplo lookup: http://www.slideshare.net/mongodb/aggregation-framework-36715147
  • 55. Pipeline de agregación – Ejemplo lookup https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#pipe._S_lookup
  • 56. Pipeline de agregación – Ejemplo lookup https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#pipe._S_lookup
  • 57. Caso de estudio – Consultas avanzadas ◦ Map-Reduce: Map: procesa cada documento y emite uno o dos objetos y Reduce: combina la salida de la operación Map.
  • 58. Caso de estudio – Consultas avanzadas Operaciones de agregación de propósito simple: comandos de base de datos de propósito especial ◦ Count: cuenta los elementos de una colección que cumplen la condición de la consulta ◦ db.collection.count(consulta) ◦ db.collection.find(consulta).count() ◦ Disctint: Encuentra los valores diferentes de un campo ◦ db.collection.distinct(campo, consulta) ◦ Group
  • 59. Caso de estudio – Consultas avanzadas db.collection.group({ key, reduce, initial [, keyf] [, cond] [, finalize] }) key documento Campo o campos a agrupar. Retorna una “key object” para usar como la clave de agrupamiento. reduce función Una función de agregación que opera sobre los documentos durante la operación de agrupamiento. Puede retornar una suma o un conteo. Toma dos argumentos: el actual documento y un documento resultado de la agregación para el grupo. initial Documento documento resultado de la agregación inicial keyf Función Opcional. Alternativa al campo clave. Especifica una funcion que crea un “key object” para usar como clave de agrupamiento. Use keyf en lugar de key para agrupar por campos calculados. cond Documento Criterios de selección para determinar qué documentos de la colección procesar. Si se omite, se procesarán todos los documentos de la colección para la operación del grupo. finalize función Opcional. Una función que ejecuta cada elemento en el conjunto de resultados antes de que db.collection.group () devuelve el valor final. Esta función puede o bien modificar el documento resultado o sustituir el documento resultado como un todo.
  • 60. Caso de estudio – Consultas avanzadas - Explain ◦ Retorna informacion del plan de consulta para las siguientes operaciones: ◦ aggregate(); count(); find(); group(); remove(); and update() methods. ◦ db.collection.explain().<method(...)> ◦ Presenta el plan de consulta (query plan) como un árbol de etapas. ◦ Cada etapa pasa sus resultados (es decir, documentos o claves de índice) al nodo padre. ◦ Los nodos hoja acceden a la colección o los índices. ◦ Los nodos internos manipulan los documentos o las claves de índice que se derivan de los nodos secundarios. ◦ El nodo raíz es la etapa final de la que MongoDB deriva del conjunto de resultados
  • 61. Caso de estudio – Consultas avanzadas - Explain ◦ Algunas de las operaciones del plan son: ◦ COLLSCAN Scan de una coleccion ◦ IXSCAN para búsqueda en el índice ◦ FETCH para recuperación de documentos ◦ SHARD_MERGE para mezclar results de fragmentos ◦ El explain tiene los siguientes parámetros opcionales (modos de verbosity) ◦ queryPlanner: es el modo por defecto, retorna solamente el plan de consulta ◦ executionStats: muestra el plan de consulta e información de ejecución ◦ allPlansExecution: muestra todos los posibles planes de ejecución.
  • 62. Caso de estudio – Consultas avanzadas - Explain Ejemplos ◦ db.products.explain().count( { quantity: { $gt: 50 } } ) ◦ Retorna solo el plan de consulta ◦ db.products.explain("executionStats").find( { quantity: { $gt: 50 }, category: "apparel" } ) ◦ Retorna el plan de consulta y información de ejecución ◦ db.products.explain("allPlansExecution").update( { quantity: { $lt: 1000}, category: "apparel" }, { $set: { reorder: true } } ) ◦ No modifica los datos pero retorna todos los posibles planes de ejecución
  • 63. Caso de estudio – respaldos Respaldo por copia de datos subyacentes: ◦ Se trata de una copia de snapshot en un punto del tiempo, sin embargo no depende de mongo sino del sistema operativo. mongodump - mongorestore ◦ mongodump: lee datos de una base de datos y crea archivos Bson de alta fidelidad ◦ mogorestore: restaura una base de datos desde un archivo Bson. mongoimport – mongoexport ◦ mongoexport es una utilidad que produce una exportación Json o CSV de los datos almacenados en una instancia de MongoDB. ◦ mongoimport importa el contenido de un archivo Json o CSV creado por mongoexport u otra herramienta de terceros.
  • 64. Caso de estudio – Usos Cualquier aplicación que necesite almacenar datos semi estructurados Algunos casos de uso ◦ Almacenamiento y registro de eventos ◦ Manejo de documentos y contenido ◦ Comercio Electrónico ◦ Alto volúmenes de lectura ◦ Aplicaciones móviles ◦ Manejo de contenido ◦ Almacenamiento de comentario
  • 65. Próxima clase BD Familia de columnas: ◦ Modelo de datos ◦ Operaciones ◦ Técnicas usadas ◦ Caso de estudio

Notas del editor

  • #41: Full deployment. As many mongoS processes as you have app servers (for example); Config DBs are small but hold the critical information about where ranges of data are located on disk/shards.
  • #42: Full deployment. As many mongoS processes as you have app servers (for example); Config DBs are small but hold the critical information about where ranges of data are located on disk/shards.