0% encontró este documento útil (0 votos)
21 vistas44 páginas

Persistencia NoSQL y MongoDB

mongomongomongomongo mongo mongo mongo

Cargado por

tutortalentotech
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
21 vistas44 páginas

Persistencia NoSQL y MongoDB

mongomongomongomongo mongo mongo mongo

Cargado por

tutortalentotech
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd

No SQL y MongoDb

Contexto de
surgimiento
Por cada minuto del día
Año YouTube 300 hs. de Video
2015 Facebook 4,166.667 User
Twitt
share 347,222 tweets
er 51,000 Apps
Apple
WhatsappDownload
347,222
Photos
Uber 694 pasajeros
Tinder 590,278 Users
SnapCh Swipe
at 284,722 Snaps
Población Total de
Internet

3.200.000.000 de
personas
PRINCIPALES CAMBIOS QUE SE PRODUJERON EN LA
TECNOLOGÍA Y EN
LOS ÚLTIMOS 15 AÑOS
MASIFICACIÓN USO DE CADA DÍA CREAMOS 2,5
INTERNET QUINTILLONES DE
SURGIMIENTO DE LAS REDES BYTES DE
SOCIALES DATOS. (2,5 Exabytes)
CRECIMIENTO EXPONENCIAL DE DISPOSITIVOS EL 90% DE LOS DATOS
MÓVILES DEL MUNDO DE HOY SE
INTERFACES DE USUARIO MAS SIMPLES E GENERARON EN LOS
INTUITIVAS ÚLTIMOS 2 AÑOS
CAMBIOS EN LAS FORMAS DE
PROCESAMIENTO

FUERTE BAJA EN LOS COSTOS DE


ALMACENAMIENTO
Big Data
DEFINIENDO
BIG DATA

Big Data es el sector de IT que hace referencia a grandes conjuntos


de datos que por la velocidad a la que se generan, la capacidad
para tratarlos y los múltiples formatos y fuentes, es necesario
procesarlos con mecanismos distintos a los tradicionales.

“Volumen masivo de datos, tanto estructurados como no-


estructurados, los cuales son demasiado grandes y difíciles de
BIG con las bases de datos y el software tradicionales." (ONU,
procesar
DATA 2012)
BIG DATA

En ambientes tradicionales de BI y DW primero se generan los requerimientos y


luego las aplicaciones. Dicho de otra forma, los requerimientos direccionan las
aplicaciones. En Big Data es al revés, ya que se utiliza la exploración de datos libre
para generar hipótesis para encontrar un patrón
¿ CUÁLES DE LAS 4 Vs TIENEN
MAYOR INFLUENCIA ?

Volume
n

Velocida
d

Varieda
d

”Veracida
fuente: forrester research. global big data d”
survey

El costo es un factor en muchos casos. Las tecnologías utilizadas en Big Data son
más económicas que las tradicionales.
Introducción
a
Bases de Datos
NoSQL
NOSQL
DATABASE
¿ Qué es NoSQL ?
Sistemas de gestión de bases de datos que difieren del modelo clásico de bases de datos
relacionales: no usan SQL como lenguaje de consulta, los datos almacenados no requieren
estructuras fijas como tablas, no garantizan consistencia plena y escalan horizontalmente.
NOSQL DATABASE
TYPES
Orientadas a columnas
Este tipo de bases de datos están pensadas para realizar consultas y agregaciones sobre
grandes cantidades de datos. Funcionan de forma parecida a las bases de datos relacionales,
pero almacenando columnas de datos en lugar de registros.

De clave-valor
Estas son las más sencillas de entender. Simplemente guardan tuplas que contienen una clave
y su valor. Cuándo se quiere recuperar un dato, simplemente se busca por su clave y se
recupera el valor.

En grafo
Basadas en la teoría de grafos utilizan nodos y aristas para representar los datos almacenados.
Son muy útiles para guardar información en modelos con muchas relaciones, como redes y
conexiones sociales

Orientadas a documentos
Son aquellas que gestionan datos semi estructurados. Es decir documentos. Estos datos son
NOSQL
DATABASE TYPES
NOSQL – DB-
ENGINES.COM
http://db-engines.com/en/r
anking
Document Based

INTRODUCCIÓN A
MONGODB
Document Based
• Las bases de datos almacenan y recuperan documentos que
pueden ser XML,
JSON, BSON, etc.

• Los documentos almacenados son similares unos con otros


pero no necesariamente con la misma estructura.
Mongo
DB
• Su nombre surge de la palabra en
inglés
“humongous” (que significa
enorme).
• MongoDB guarda estructuras de
datos en documentos tipo JSON
(JavaScript Object Notation) con un
esquema dinámico.
• Internamente MongoDB almacena
los datos en formato BSON (Binary
JavaScript Object Notation).
• BSON está diseñado para tener un
El Origen
200 La empresa 10gen lo desarrolla
cuando estaba desarrollando una
7 Plataforma cómo servicio (PaaS -
Platform as a Service). Similar a
Google App Engine.
Bases de
Datos
200 En este año MongoDB es lanzado como
Producto. Es publicado bajo licencia de
Documental
es
9 código abierto AGPL.

201 Se lanza la versión 1.4 considerada


como una Base de Datos lista para
Bases de Datos Bases de
1 producción.
de Datos De
Propósitos Código Abierto
Generales
201 Actualmente MongoDB está por la
versión 3.2.8 y es la Base de Datos
6 NoSQL con mayor popularidad.
Terminología RDBMS vs. Document
Based (MongoDB)
RDBMS MongoDB

Database instance MongoDB instance


Database / Schema Database
Table Collection
Row Document
Rowid _id
Join Dbref
Modelado de Relaciones entre
Documentos
Relaciones Uno a Uno Si la dirección es un dato frecuentemente consultado
con documentos embebidos junto con el Nombre de la persona, la mejor opción será
embeber la dirección en los datos de la persona.
Modelo Normalizado

Colección Personas Colección Personas


{ _id: “u0001", { _id: “u0001",
nombre: “Juan Martín Hernandez" } nombre: “Juan Martín Hernandez“,

direccion:{calle: “Malabia 2277",


Colección Direcciones ciudad: “CABA",
{ persona_id: “u0001", provincia: “CABA",
calle: “Malabia codPostal: "1425" }
2277", ciudad: }
“CABA", provincia:
“CABA", codPostal: Con una sola consulta podríamos recuperar toda la
"1425" } información
de una persona.
Modelado de Relaciones entre Documentos
Relaciones Uno a Muchos Si las direcciones son un dato frecuentemente consultado
junto con el Nombre de la persona, la mejor opción será
Con Documentos Embebidos embeber las direcciones en los datos de la persona.
Modelo Normalizado Colección Personas
{ _id: “u0001",
Colección Personas
nombre: “Juan Martín Hernandez“,
{ _id: “u0001",
nombre: “Juan Martín Hernandez" }
direcciones:[{calle: “Malabia 2277",
ciudad: “CABA",
Colección Direcciones
provincia: “CABA",
{ persona_id: “u0001",
codPostal: "1425" },
calle: “Malabia
2277", ciudad:
{calle: “Av. Santa Fe 3455",
“CABA", provincia:
ciudad: “Mar del Plata",
“CABA", codPostal:
provincia: “Buenos Aires",
"1425" }
codPostal: “7600" }
{persona_id: “u0001",
]
calle: “Av. Santa Fe 3455",
}
ciudad: “Mar del Plata",
provincia: “Buenos Aires", Con una sola consulta
codPostal: “7600" } podríamos recuperar toda la
información
Modelado de Relaciones entre Documentos
Relaciones Uno a Muchos Con Documentos Referenciados
Colección libros Colección Editores
{titulo: "MongoDB: The Definitive Guide", { nombre: "O'Reilly Media",
autor:[ "K. Chodorow", "M. Dirolf" ], anioFundacion: 1980,
fechaPublicacion: ISODate("2010-09-24"), USAState: "CA“,
paginas: 216, libros:
lenguaje: "Ingles", [987654321,1234567890] }
editor: { nombre: "O'Reilly Media", Colección Libros
anioFundacion: 1980, {_id: 987654321
USAState: "CA" } } titulo: "MongoDB: The Definitive Guide",
autor:[ "K. Chodorow", "M. Dirolf" ],
{titulo: "50 Tips and Tricks for MongoDB…", fechaPublicacion: ISODate("2010-09-24"),
autor: "K. Chodorow", paginas: 216,
fechaPublicacion: ISODate("2011-05-06"), lenguaje: "Ingles“}
paginas: 68, {_id: 1234567890
lenguaje: “Ingles", titulo: "50 Tips and Tricks for MongoDB…",
editor: { nombre: "O'Reilly Media", autor: "K. Chodorow",
anioFundacion: 1980, fechaPublicacion: ISODate("2011-05-06"),
USAState: } } paginas: 68,
"CA" lenguaje: “Ingles"}

Cuando usamos referencias, el crecimiento de las relaciones determinan donde conviene almacenar
la referencia. Por ej. Si el nro. de libros por editor es chico y no crecerá mucho, este modelo podría
ser conveniente.
Modelado de Relaciones entre Documentos
Relaciones Uno a Muchos Con Documentos Referenciados
Colección Editores
Colección libros { _id: "oreilly"
{titulo: "MongoDB: The Definitive Guide", nombre: "O'Reilly Media",
autor:[ "K. Chodorow", "M. Dirolf" ], anioFundacion: 1980,
fechaPublicacion: ISODate("2010-09-24"), USAState: "CA“,
paginas: 216, }
lenguaje: "Ingles",
editor: { nombre: "O'Reilly Media",
anioFundacion: 1980,
Colección Libros
{_id: 987654321
USAState: "CA" } }
titulo: "MongoDB: The Definitive Guide",
autor:[ "K. Chodorow", "M. Dirolf" ],
{titulo: "50 Tips and Tricks for MongoDB…",
fechaPublicacion: ISODate("2010-09-24"),
autor: "K. Chodorow",
paginas: 216,
fechaPublicacion: ISODate("2011-05-06"),
lenguaje: "Ingles“,
paginas: 68,
idEditor: "oreilly"}
lenguaje: “Ingles",
editor: { nombre: "O'Reilly Media",
{_id: 1234567890
anioFundacion: 1980,
titulo: "50 Tips and Tricks for MongoDB…",
USAState: } }
autor: "K. Chodorow",
"CA"
fechaPublicacion: ISODate("2011-05-06"),
paginas: 68,
lenguaje: “Ingles“,
idEditor: "oreilly"}

En cambio si queremos evitar Arreglos mutables y crecientes podemos implementar una


referencia al editor dentro de cada libro.
En qué casos usarlas ?
Logging de Eventos

• las bases de datos basadas en documentos puede loguear cualquier clase de eventos y almacenarlos con
sus diferentes estructuras.

• Pueden funcionar como un repositorio central de logueo de eventos.

CMS, blogging

• su falta de estructura predefinida hace que funcionen bien para este tipo de aplicaciones.

Web-analytics / Real-Time analytics

• Almacenar cantidad de vistas a una página o visitantes únicos.

Commerce

• A menudo requieren tener esquemas flexibles para los productos y órdenes


MongoDB – Instalación

INSTALACIÓN
Y
CONFIGURACIÓN
Instalación y configuración
1. lnstalar MongoDB

2. Actualizar variable Path

• Buscar el directorio donde se instaló MongoDb (por ejemplo C:\Program Files\MongoDB\Server\3.2\


bin)
• Añadir MongoDb a la variable Path (Inicio > Equipo > Propiedades del Sistema > Opciones
avanzadas)

3. Crear una carpeta (con los permisos adecuados) para guardar la base de datos

• C:/Data/Db es la carpeta default para MongoDb


• Si quisiéramos tener otro path debemos ejecutar desde consola: mongod --dbpath ruta/nueva-a/la-
carpeta-db

4. Abrir conexión desde Consola de Windows (Símbolo del Sistema) ejecutando el comando mongod

5. Mantener la consola de conexión abierta y abrir una nueva consola para operar sobre la base
UTILIZANDO MONGODB
Caso Práctico
Caso Práctico
Armaremos un modelo que contenga la información de las facturas y
todos sus ítems, detallando el nombre, apellido, cuit y región del
cliente al que se le emitió la factura, para poder realizar consultas
desde un portal de facturas de la forma más performante posible.
UTILIZACIÓN DE
MONGODB
DESDE LA LÍNEA DE
COMANDOS
Operaciones sobre una colección
Ver todos los comandos:
db.facturas.help()

Ejemplos:

Ver todos los documentos:


db.facturas.find()

Cantidad de documentos en la colección:


db.facturas.count()

Espacio ocupado por los documentos de la colección:


db.facturas.dataSize()
Operaciones sobre una colección
Inicio de servidor mongo por consola:
C:>mongod

Inicio de cliente mongo por consola:


C:>mongo

Ver bases de datos


show dbs

Ver colecciones
show collections
Caso Práctico
Insertar
db.facturas.insert({"_id": ObjectId("55e4a6fabfc68c676a041063"),"cliente":
{"apellido":"Malinez","cuit":2.740488484e+09,"nombre":"Marina","region":"CENTRO"},"condPag
o":"CONTADO","fechaEmision": ISODate("2014-02-20T00:00:00.000Z"),"fechaVencimiento":
ISODate("2014-02-20T00:00:00.000Z"),"item":[{"cantidad":11.0,"precio":18.0,"producto":"
CORREA 12mm"},{"cantidad":1.0,"precio":490.0,"producto":"TALADRO
12mm"}],"nroFactura":1000.0})
db.facturas.insert({"_id": ObjectId("55e4a6fbbfc68c676a041064"),"cliente":
{"apellido":"Zavasi","cuit":2.038373771e+09,"nombre":"Martin","region":"CABA"},"condPago":"3
0 Ds FF","fechaEmision": ISODate("2014-02-20T00:00:00.000Z"),"fechaVencimiento":
ISODate("2014-03-22T00:00:00.000Z"),"item":
[{"cantidad":2.0,"precio":134.0,"producto":"CORREA 10mm"}],"nroFactura":1001.0})
db.facturas.insert({"_id": ObjectId("55e4a6fbbfc68c676a041065"),"cliente":
{"apellido":"Zavasi","cuit":2.038373771e+09,"nombre":"Martin","region":"CABA"},"condPago":"C
ONTADO","fechaEmision": ISODate("2014-02-20T00:00:00.000Z"),"fechaVencimiento":
ISODate("2014-02-20T00:00:00.000Z"),"item":[{"cantidad":6.0,"precio":60.0,"producto":"TUERCA
2mm"},{"cantidad":12.0,"precio":134.0,"producto":"CORREA 10mm"}],"nroFactura":1002.0})
Operaciones sobre una colección
Buscar documento para cliente con determinado apellido
db.facturas.find({"cliente.apellido":"Malinez"})

Consultar los primeros dos documentos


db.facturas.find().limit(2)

Consultar documentos salteando los primeros dos documentos


db.facturas.find().skip(2)

Visualización mejorada
db.facturas.find().pretty()
Operaciones sobre una colección
Consultar dos documentos, salteando los dos primeros documentos de una
colección, mostrándolos en un modo mejorado.
db.facturas.find().limit(2).skip(2).pretty()

Consultar documentos sólo mostrando algunos datos


db.facturas.find({"cliente.apellido":"Malinez"}, {"cliente.cuit":1, "cliente.region":1})

Buscar documento para cliente con dos criterios


Para Zavasi teníamos dos documentos:
db.facturas.find({"cliente.apellido":"Zavasi"}).pretty()
Agregamos un criterio: db.facturas.find({"cliente.apellido":"Zavasi",
"nroFactura":1001.0}).pretty()

Ordenamiento en forma ascendente


db.facturas.find().sort({nroFactura:1})
Consultando una Colección –
Criterios de Selección
Busca la cantidad de facturas cuyo Nro. de Factura sea mayor que 1465

Operadore db.facturas.find( { nroFactura : {$gt:1465} } ).count()


s$

$gt
$gte
$lt
$lte
$not Busca las facturas cuya fecha de emisión sea mayor o igual
$or al 24/02/2014.
$in
db.facturas.find({fechaEmision:{$gte: ISODate("2014-02-24T00:00:00Z")} } )
$nin
$exis
t
$rege
x
Insertando un Documento
El método insert tiene la siguiente
sintaxis:

Evalúa si existe un próximo documento. Devuelve True


o False.
. db.collection.insert
( <document or array of documents>, writeconcern Es opcional, lo veremos en la parte de consistencia.
{ writeConcern: <document>,
ordered: <boolean> } ) Ordered lo vemos en un par de slides

Ejemplo, inserción de un documento sin _id:

db.facturas.insert({nroFactura:30003,codPago:”CONTADO”})
_id: Document Id único autogenerado
Insertando un Documento
Ejemplo, inserción de un documento con _id:

db.facturas.insert({_id:23094776, nroFactura:30004,codPago:”CONTADO”})

Al crear una colección, el motor de BD crea un índice único sobre el


atributo _id.
Borrando
Documentos
Operación Remove
Sintaxis
db.<collection_n
ame>.remove({crit
erio_de_eliminaci
ón})

Esta operación eliminará los documentos que cumplan con el criterio definido.

Warning: Remove es una operación de tipo multi-documento!!


Recomendación: Es conveniente antes de borrar hacer un find o un count para
asegurarse lo que
quiero borrar.

Ejemplo 1 – Borrado de TODOS LOS DOCUMENTOS de una colección

db.accesos.remove({})
Elimina TODOS LOS ELEMENTOS de una colección.
Borrando
Documentos
Ejemplo 2 – Remove por clave primaria

db.updtst.remove({_id:100})

Elimina el documento cuyo _id sea 100 de la colección


updtst.

Ejemplo 3 – Remove por un criterio con múltiples documentos que aplican

db.updtst.remove({items:88})
Modificando
Documentos
Permite modificar uno o más documentos de una colección. Por default modifica sólo un
documento.
db.coleccion.update ( {clausula_where},
{documento_o_expresión_a_modificar},
{ upsert, multi, writeconcern}
)

upsert (true o false)Si está configurado en “True” significa que realizará un update si existe un documento que
concuerda con el criterio, o un insert si no existe algún documento que concuerde con el criterio. El
valor default es “false”, en este caso no realiza un insert cuando no existe documento que concuerde
con el criterio.

multi (true o false) Es opcional. Si es configurado en true, el update realiza la actualización de multiples
documentos que concuerdan con el criterio cláusula_where. Si es configurado en false, modifica solo
un documento. El valor default es false. Sólo actúa en updates parciales con operadores $.

writeconcern Es opcional, lo veremos en la parte de consistencia.


Modificando
Documentos
Update Totales/Completos

Se realiza el update del documento completo, reemplazando el mismo.

Update Parciales
Operadores

Operadores sobre cualquier atributo

$set Permite modificar el valor de un atributo, o agregar un nuevo atributo al documento.


$unset Permite eliminar un atributo de un documento.
$inc Incrementa o decrementa el valor de un atributo ( n ó –n)
Operadores sobre Arrays
$push Agrega un elemento a un Array o crea un Array con un elemento.
$addtoSet Agrega un elemento al Array solo si no existe en el Array.
$pushAll Agrega varios elementos a un Array con los valores indicados o crea un Array con esos
elementos. (Operación Múltiple)
$pop Elimina un elemento de un Array por sus extremos, permitiendo eliminar el primer elemento (-1)o el
último (1).
$pull Elimina todos los elementos de un Array que contengan el valor indicado.
$pullAll Elimina todos los elementos de un Array que contengan alguno de los valores indicados.
(Operación Múltiple)
Modificando Documentos
Completos
Update Totales/Completos

db.updtst.update({x:2},{"x" : 2, "y" : 999 })

Este comando reemplaza el primer documento encontrado por con valor x:2 por este otro en donde el elemento y:999, no tengo el
control de cuál estoy modificando, lo correcto era modificar poniendo en el criterio el _id.
Modificando
Documentos Parciales
Update Parciales

Ejemplo 1 – Operador $set – Modificación de un valor de un atributo existente

Dado el siguiente documento:

db.updtst.update({_id:100},{$set : {x:100}})

Realizará una modificación del valor de atributo x a 100


Modificando
Documentos Parciales
Update Parciales

Otro Ejemplo – Operador $set – Opción multi – Agregar un atributo en todos los documentos

db.updtst.update({x:2},{$set : {z:”NUEVO”}},{multi:true})

Este reemplaza en TODOS los documentos encontrados con valor x:2 agregando el atributo z:”NUEVO”

También podría gustarte