NoSQL - MongoDB

29
Bases de datos NoSQL MongoDB Lic. Juan Azcurra /jazcurra

Transcript of NoSQL - MongoDB

Page 1: NoSQL - MongoDB

Bases de datos NoSQLMongoDB

Lic. Juan Azcurra/jazcurra

Page 2: NoSQL - MongoDB

NoSQL

Introducción

Page 3: NoSQL - MongoDB

Eras de las Bases de Datos

▣RDBMS para sistemas transaccionales.

▣Data Warehouse para aplicaciones analíticas.

▣NoSQL para cualquier contenido.

Page 4: NoSQL - MongoDB

Evolución de las Bases de Datos

Previo a NoSQL Posterior a NoSQL

Page 5: NoSQL - MongoDB

Evolución de las Bases de Datos: RDBMS

▣Los datos usualmente son almancenados en filas.

▣Lenguaje estandarizado de consultas (SQL).

▣El modelo de datos se define antes de poder agregar los datos.

▣Las relaciones unen datos desde distintas tablas (joins).

▣Los resultados son tablas.Oracle, MySql, PostgresSQL, MSSql, IBM DB/2

▣Pros: transacciones con alto nivel de control de seguridad (ACID).

▣Cons: diseño previo, no son muy escalables.

Page 6: NoSQL - MongoDB

Evolución de las Bases de Datos: Analytical

▣Basadas en un esquema estrella con una tabla central para cada evento.

▣Optimizadas para análisis de datos históricos.

▣Uso de lenguaje MDX para consultar las medidas para cada categoría de datos.

Cognos, Hyperion, Microstrategy, Pentaho, SAP BO, Microsoft, Oracle.

▣Pros: consultas rápidas para grandes volúmenes.

▣Cons: no optimizado para transacciones y actualizaciones.

Page 7: NoSQL - MongoDB

Evolución de las Bases de Datos: Key Value

▣Utilizan valores claves para acceder a BLOBs (Binary Large Objects) de datos.

▣Los valores pueden contener cualquier tipo de datos (imágenes, audio, video).

Berkley DB, Memcache, DynamoDB, S3, Redis, Riak

▣Pros: escalable, API simple (insertar, leer, eliminar).

▣Cons: no es posible consultar basado en el contenido del valor.

Page 8: NoSQL - MongoDB

Evolución de las Bases de Datos: Column-Family

▣La clave incluye una fila, familia de columna y nombre de columna.

▣Almacenar blob versionado en una tabla.

▣Las consultas se pueden realizar a nivel de fila, familia o nombre de columna.

Cassandra, HBase, Hypertable, Apache Accumulo, Bigtable

▣Pros: escalable, permite versionado.

▣Cons: no es posible consultar basado en el contenido del valor.

Page 9: NoSQL - MongoDB

Evolución de las Bases de Datos: Graph

▣Los datos son almacenados en una serie de nodos, relaciones y propiedades.

▣Las consultas son a través de los grafos.

▣Ideal para cuando las relaciones entre los datos es clave: ej. Redes sociales.

Neo4J, AllegroGraph, Bigdata triple store, InfiniteGraph, StarDog

▣Pros: consultas rápidas en la red.

▣Cons: Mala escalabilidad cuando el grafo no cabe en memoria, lenguaje de consulta especializado.

Page 10: NoSQL - MongoDB

Evolución de las Bases de Datos: Document

▣Los datos son almacenados en jerarquías anidadas.

▣Los datos se guardan como una unidad.

▣Cualquier ítem en el documento puede ser consultado.

MarkLogic, MongoDB, CouchBase, CouchDB, eXist-db

▣Pros: capa de mapeo, ideal para búsqueda.

▣Cons: Complejo para implementar, incompatible con SQL.

Page 11: NoSQL - MongoDB

SQL vs NoSQL

Page 12: NoSQL - MongoDB

Document Database

MongoDB

Page 13: NoSQL - MongoDB

MongoDB: Casos de estudio

Page 14: NoSQL - MongoDB

MongoDB: Conceptos

▣Base de Datos multiplataforma, que provee alta performance, alta disponibilidad y escalamiento automático.

▣Un registro en MongoDB es un documento, el cual es una estructura compuesta de pares campo: valor. Los documentos son similares a los objetos JSON.

Page 15: NoSQL - MongoDB

JSON: Conceptos

▣JavaScript Object Notation, es un formato liviano para intercambio de datos.

▣Es un formato de texto completamente independiente del lenguaje.▣Está constituido por dos estructuras:

□Colección de pares de nombre / valor.□Una lista ordenada de valores.

{ : }valuestring

object

,

object

Page 16: NoSQL - MongoDB

JSON: Values

▣Un valor puede ser una cadena de caracteres, un número, un boolean, un objeto o un array.

number

string

value

object

false

null

array

true

value

Page 17: NoSQL - MongoDB

JSON: Array

▣Un arreglo es una colección de valores,

[ ]value

array

,

Page 18: NoSQL - MongoDB

JSON: Ejemplo

{ "nombre": "Juan Perez", "alumno": true, "carrera": "Licenciatura en Informatica", "materias": [

{ "materia": "Laboratorio 2","nota": 7,"fecha": "2106-09-20"

}, { "materia": "Base de Datos",

"nota": 9,"fecha": "2015-12-20" }

]}

Page 19: NoSQL - MongoDB

MongoDB: Definiciones

Page 20: NoSQL - MongoDB

MongoDB: Documents

▣MongoDB almacena los registros de datos como documentos BSON (Binary JSON).

▣El valor de un campo puede ser cualquier tipo de dato BSON, incluyendo otro documento, array o un array de documentos.

▣Cada documento incluye un ID para identificarlo univocamente.

Page 21: NoSQL - MongoDB

MongoDB: Modelado

▣Al momento de modelar un documento, se deben considerar la decisión de embeber los datos o utilizar referencias.

Page 22: NoSQL - MongoDB

MongoDB: Modelado

▣Es posible embeber datos relacionados en una estructura simple o documento, estos esquemas son desnormalizados.

▣Los modelos de datos embebidos se utilizan cuando:□Existe una relación “contiene” entre las entidades.□Existe una relación uno-a-muchos entre las entidades.

Page 23: NoSQL - MongoDB

MongoDB: Modelado

▣Relaciones uno-a-uno entre entidades, es posible embeber directamente los datos en el documento.

□En el ejemplo, el domicilio del cliente está embebido en la entidad.

Page 24: NoSQL - MongoDB

MongoDB: Modelado

▣Es posible resolver relaciones uno-a-muchos embebiendo la información en el documento.

Page 25: NoSQL - MongoDB

MongoDB: Modelado

▣Es posible (para evitar la redundancia), resolver las relaciones uno-a-muchos utilizando referencias.

Page 26: NoSQL - MongoDB

MongoDB: CRUD

▣Create Operation: □db.collection.insert()□db.collection.insertOne()□db.collection.insertMany()

▣Read Operation:□db.collection.find()

▣Update Operation:□db.collection.update()□db.collection.updateOne()□db.collection.updateMany()□db.collection.replaceOne()

▣Delete Operation:□db.collection.remove()□db.collection.deleteOne()□db.collection.deleteMany()

Page 27: NoSQL - MongoDB

MongoDB: Correspondencia con SQL

Page 28: NoSQL - MongoDB

MongoDB: Correspondencia con SQL

Page 29: NoSQL - MongoDB

MongoDB: Correspondencia con SQL