noSQL_Mongo2
noSQL_Mongo2
@icemd
linkd.in/ICEMD
CanalICEMD
icemd
MongoDB
Sub-puntos de la sesión
Guillermo Ortiz Ferández, Arquitecto Añadir
BigData en Orange foto
y BigData Engineer.
2
Documento
• ¿Qué es un documento?
• Es un contenedor de datos que puede estar estructurado y se
recupera y almacena en un formato
• Los datos pueden ser textos, fechas, números, imágenes,
etc
• Formatos típicos son JSON, XML, etc
Documento Ejemplos
• Ha evolucionado rápidamente
• La comunidad está muy activa
• Hay mucha documentación
• Buen rendimiento
• Se puede acceder a MongoDB a través de muchos
lenguajes de programación
• Fácil de administrar gracias a la consola
• Herramientas para ver rendimientos, exportar, importar, etc
• Muchos casos de uso con éxito
Introducción a JSON
• Tipos de datos
• Cadena de caracteres (String)
• Enteros de 32 o 64 bits
• Tipo de dato real de 64 bits
• Date (número entero de milisegundos en Tiempo Unix)
• Array de bytes(datos binarios)
• Booleans
• Nulo
• Objeto BSON
• Array BSON
• Expresiones regulares
• Código JavaScript
Introducción a BSON
RDBMS MongoDB
Base de datos Base de datos
Tablas Colecciones
Filas Documentos
Columnas Campos
Índices Índices
Clave primaria _id
Servicios MongoDB
• insertOne
• Es una operación atómica
Update en MongoDB
• Ejemplo $avg
• { "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-02-15T09:12:00Z") }
• db.sales.aggregate(
[
{
$group:
{
_id: "$item",
avgAmount: { $avg: { $multiply: [ "$price", "$quantity" ] } },
avgQuantity: { $avg: "$quantity" }
}
}
]
)
• { "_id" : "xyz", "avgAmount" : 37.5, "avgQuantity" : 7.5 }
{ "_id" : "jkl", "avgAmount" : 20, "avgQuantity" : 1 }
{ "_id" : "abc", "avgAmount" : 60, "avgQuantity" : 6 }
Operaciones de Agregación
• Ejemplo $match
• Normalizar
• Escrituras más rápidas
• 1:1
• Empleado - Curriculum
• Usuario - Perfil
• Lo normal es que haya un único documento y no se acceda a él por
referencia
• Posibles casos
• Un caso extremo es que el documento embebido sea tan grande
que sea necesario sacarlo por rendimiento
• Frecuencia de acceso
• Patrón de actualización
• Atomicidad
Modelo de datos
• 1:N
• Ciudades - Habitantes
• Empresas - Empleados
• Equipo - Jugadores
• Posibles casos
• Depende de cómo sea de grande la relación se puede embeber o
puede que no tenga sentido
• Patrón de acceso
• Atomicidad
Modelo de datos
• N:M
• Libros - Autores
• Alumnos - Profesores
• Posibles casos
• Cantidad de elementos que están relacionados
• Patrón de actualización
Almacenamiento en MongoDB
• Mejoran lecturas
• Empeoran escrituras
• Cada vez que se inserta un documento hay que actualizar el
índice
• Cada vez que se actualiza un campo indexado hay que
actualizar el índice
• Si un documento se mueve hay que actualizar el índice
• Es importante que los índices entren en memoria para no paginar
• Desde la versión 3.0.0 se usa la función createIndex en lugar de
ensureIndex (deprecated)
Queries con Índices
▪ Verticalmente
• Más memoria
• Más CPU’s
• Más capacidad de almacenamiento
▪ Crecer verticalmente tiene bastantes limitaciones
tecnológicas
▪ Incluso si vamos a soluciones cloud estas limitaciones
están presentes
▪ Horizontalmente
• Dividir el dataset entre diferentes servidores
• Añadir más servidores deberían de añadir la capacidad proporcional
Sharding en MongoDB
@icemd
linkd.in/ICEMD
CanalICEMD
¡Gracias! icemd