Sunteți pe pagina 1din 53

Bases de Datos NoSQL

UNIVERSIDAD SANTIAGO DE CALI


2015

Contenido

El Futuro de las Bases de Datos

Por qu aparecen

En qu se diferencian

Qu elegir

Tipos comunes

MongoDB

El Futuro de las Bases de Datos

El Futuro

Las bases de datos se han convertido en un producto estratgico


empresarial.

Actualmente las bases de datos no se entienden como hace unos 10 aos,


han evolucionado as como ha evolucionado el uso de Internet y otras
tecnologas subyacentes.

Un mundo Hiperconectado requiere tambin una evolucin en el manejo


de la gran cantidad de informacin que se genera.

En las bases de datos la evolucin no termina en el movimiento


SQL/Relacional, sino que se ha gestado un movimiento No solo SQL o
NoSQL.

El Futuro

Siguen sin resolver los problemas de siempre:

El 70% de los informes se utilizan para volver a introducir datos en bases de datos

80/90% del tiempo se dedica al mantenimiento

60/70% se dedica a mantener interfaces y transformar datos de una base a otra

La clave de la gestin de bases de


datos empresariales est en la
integracin de las plataformas dentro
de la nube. - SAP

100M$ a parchar programas por errores al pasar datos

70% de las lneas de cdigo slo mueven datos

20/40% de toda la mano de obra de EEUU se dedica a recoger, almacenar, recuperar, ...
informacin
Mercadeo de bases de datos es la

the need to develop Autonomous


inversin del futuro - Experian
Database Management systems (ADBMS)
Finding information today may seem
that would manage themselves without
as easy as typing the question into
human intervention.
Google or Bing
With no disks and thus no seek delays, assembly of complex objects will
have different performance tradeoffs. I think a lot of options in physical
database design will change, from indexing to compression and clustering

Predicciones

Por Qu Aparecen

De Dnde Vienen

Con los aos, hemos aprendido tcnicas comunes para normalizarlas, escalarlas, y utilizarlas
como sistema de persistencia para almacenar informacin desde nuestro lenguaje procedural u
orientado a objetos favorito (entre otros).

Apareci la web, el software como servicio, los servicios en la nube y los problemas de alta
escalabilidad.

Los modelos relacionales se adaptan para hacerlos escalar pero se hacen cada vez menos
intuitivos a medida que aumenta la complejidad. Triples y cudruples JOINs en consultas SQL, a
veces poco eficientes, y sistemas de almacenamiento de resultados en cachs para acelerar la
resolucin de las peticiones y evitar ejecutar cada vez estas pesadas operaciones, son el pan de
cada da en muchos proyectos de software.

Los sistemas NoSQL, acrnimo de Not Only SQL, intentan enfrentar este problema proponiendo
una estructura de almacenamiento ms verstil, aunque a costa de perder ciertas
funcionalidades como las transacciones, o la incapacidad de ejecutar el producto cartesiano de
dos tablas (tambin llamado JOIN) teniendo que recurrir a la desnormalizacin de datos.

Ejemplos: CouchDB, MongoDB, RavenDB, Neo4j, Cassandra, BigTable, Dynamo, Riak, Hadoop, y
otras muchas.

En Qu Se Diferencian

En Qu Se Diferencian

Tres diferencias principales: ausencia de esquema en los registros de


datos, escalabilidad horizontal sencilla, y velocidad (no siempre es
cierto, pues muchos de estos sistemas an no estn suficientemente
maduros).

No existe ACID (Atomicity, Consistency, Isolation, Durability) como en


las bases de datos relacionales, pero existe BASE (Basic Availability,
Soft State, Eventual Consistency) que da caractersticas para el manejo
de datos.

Modelo de Datos

Modelo de Consultas

BD orientadas a documento: posibilidad de ejecutar consultas con base en cualquier tipo


de campo dentro del documento. Permiten hacer consultas basadas en ndices secundarios.
Esto permite actualizar registros incluyendo uno o ms campos dentro del documento.

BD orientadas a grafo: almacenamiento optimizado para ejecutar la navegacin entre


nodos (traversals). Son eficientes para realizar consultas en las que existan relaciones de
proximidad entre datos, y no para ejecutar consultas globales.

BD clave-valor y orientadas a columna: permiten obtener y actualizar datos con base


en una llave primaria. Modelo de consultas limitado con costos de desarrollo y requisitos a
nivel de aplicacin para ofrecer un modelo de consultas avanzado. Por ejemplo, los ndices
deben ser gestionados por el propio usuario.

Modelo de Consistencia

Los sistemas NoSQL tpicamente mantienen varias copias de los datos para proporcionar escalabilidad y
disponibilidad. Estos pueden utilizar dos tipos de consistencia distinta entre los datos de sus mltiples
copias: consistencia y consistencia eventual.

En los sistemas consistentes se garantiza que las escrituras sean inmediatamente visibles para las
consultas posteriores. Especialmente tiles para aplicaciones en las que es indispensable que los datos
sean siempre coherentes. Los sistemas consistentes proporcionan ventajas en las escrituras, pero las
lecturas y las actualizaciones son ms complejas.

En los sistemas eventualmente consistentes (trmino de Amazon), existe un periodo durante el que no
todas las copias de los datos estn sincronizadas. El hecho de no tener que comprobar la consistencia de
los datos en cada una de las operaciones supone una mejora importante en el rendimiento y disponibilidad
del sistema, aunque para ello se sacrifique la coherencia de los datos. Estos tipos de sistemas son
especialmente tiles para datos que no cambian a menudo, como archivos histricos o logs.

Las bases de datos orientadas a documento o grafo pueden ser consistentes o eventualmente
consistentes, mientras que las bases de datos clave-valor y orientadas a columna son tpicamente
eventualmente consistentes.

API

La principal funcionalidad de la API (Application Programming


Interface) es mantener el dilogo con la base de datos, para
poder llevar a cabo el acceso y manipulacin de los datos.

Las bases de datos NoSQL no cuentan con un estndar, por lo


que cada base de datos posee su propia API. La madurez de la
API repercute tanto en el tiempo como en el costo del desarrollo
de aplicaciones.

Qu Elegir

Qu elegir

Cundo pensamos en bases de datos relacionales acudimos casi a los mismos


nombres.

Oracle y Microsoft SQL Server, PostgreSQL o MySQL.

Para un desarrollador no es difcil elegir entre un sistema y otro. Al final todo son tablas,
columnas, claves primarias, y sobre todo, consultas SQL.

Cul elegir? Caractersticas vs precio.

Por el lado de las NoSQL hoy existen unas 150, ninguno ha obtenido todava la
fama que las bases de datos relacionales.

Hay varias aproximaciones diferentes para clasificar las bases de datos NoSQL (Teorema
CAP, con base en el modelo de datos, etc.)

Se considera que existen cuatro tipos diferentes: orientadas a documentos, orientadas a


columnas, de clave-valor y en grafo.

Qu Elegir

Teorema para sistemas distribuidos llamado CAP, Eric Brewer. Explica que hay 3 requerimientos
bsicos en los sistemas distribuidos:

Consistencia. Se refiere a la integridad de la informacin. Todos los nodos del sistema ven la misma
informacin en todo momento.

Disponibilidad. Que tu aplicacin est disponible siempre. Si falla algn nodo los dems pueden seguir
operando sin problemas.

Tolerancia al particionamiento. El sistema contina funcionando a pesar de que se pierdan mensajes de


forma arbitraria.

El teorema CAP establece que es imposible que un sistema satisfaga los 3 requerimientos de
forma simultnea, por lo que debe elegirse 2 y enfocarse en ellos. En el caso de los RDBMS, se
le da ms importancia a la consistencia y a la disponibilidad, en detrimento de la tolerancia al
particionamiento. Por otro lado, las diferentes opciones de NoSQL dan mayor prioridad a la
tolerancia y en ocasiones la disponibilidad.

Qu Elegir

Qu Elegir El Mercado

Tipos Comunes

Tipos Comunes

Orientadas a Documentos

Gestionan datos semi


estructurados, es decir
documentos.

Son almacenados en algn


formato estndar como puede
ser XML, JSON o BSON.

Se pueden utilizar en gran


cantidad de proyectos,
incluyendo muchos que
tradicionalmente funcionaran
sobre bases de datos
relacionales.

Un documento suele ser algo parecido a:

Orientadas a Documentos - Ejemplos

MongoDB: probablemente la base de datos NoSQL ms famosa del


momento. En octubre del ao pasado, MongoDB consegua 150
millones de dlares en financiacin, convirtindose en una da las
startups ms prometedoras. Algunas compaas que actualmente
utilizan MongoDB son Foursquare o eBay.

CouchDB: es la base de datos orientada a documentos de Apache. Una


de sus interesantes caractersticas es que los datos son accesibles a
travs de una API Rest. Este sistema es utilizado por compaas como
Credit Suisse y la BBC.

Orientadas a Columnas

Pensadas para realizar consultas y


agregaciones sobre grandes cantidades de
datos. Como su nombre lo indica, guardan
los datos en columnas en lugar de filas.

Ejemplos:

Cassandra: aunque en realidad sigue un


modelo hbrido entre orientada a columnas y
clave-valor. Es utilizada por Facebook y
Twitter (aunque dejaron de usarla para
almacenar tweets).

HBase. Escrita en Java y mantenida por el


Projecto Hadoop de Apache, se utiliza para
procesar grandes cantidades de datos. La
utilizan Facebook, Twitter y Yahoo.

De Clave - Valor

Simplemente guardan tuplas que contienen una


clave y su valor. Cundo se quiere recuperar un
dato, simplemente se busca por su clave y se
recupera el valor.

Ejemplos:

DynamoDB: desarrollada por Amazon, es una


opcin de almacenamiento que podemos usar
desde Amazon Web Services. La utilizan el
Washington Post y Scopely.

Redis: desarrollada en C y de cdigo abierto, es


utilizada por Craiglist y Stack Overflow (a modo de
cach).

De Grafo

Basadas en la teora de grafos utilizan nodos y


aristas para representar los datos almacenados. Son
muy tiles para guardar informacin en modelos con
muchas relaciones, como redes y conexiones
sociales.

Ejemplos:

Infinite Graph: escrita en Java y C++ por la compaa


Objectivity. Tiene dos modelos de licenciamiento: uno
gratuito y otro de pago.

Neo4j: base de datos de cdigo abierto, escrita en Java


por la compaa Neo Technology. Utilizada por
compaas como HP, Infojobs o Cisco.

Taller en Clase - Investigacin

Apache Cassandra

Neo4J

DynamoDB

CouchDB

Tipo de base de datos

API/Modo de consulta que usan

Lenguaje de escritura

Usos

Taller en Clase

MongoDB

Gestor de datos NoSQL, distribuido, de tipo documental que almacena documentos en un


formato similar a JSON (internamente usa BSON). Est escrita en C++ y es multiplataforma, Open Source y gratuito.

Naci a finales del 2007 como un proyecto interno de la empresa 10Gen para usarlo en
una aplicacin de Internet que estaban desarrollando. En 2009 deciden liberarlo como
Open Source y dedicarse ntegramente a l, ofreciendo soporte comercial y servicios
relacionados.

Su nombre proviene de la palabra en ingls Humongous, que significa literalmente "algo


realmente grande", y se refiere a su capacidad de gestionar cantidades enormes de datos.

En lugar de guardar los datos en registros, guarda los datos en documentos. Estos
documentos son almacenados en BSON, que es una representacin binaria de JSON.

Anexo - JSON

JSON (JavaScript Object Notation) es un


formato para el intercambios de datos.

Naci como alternativa a XML, su fcil uso en


javascript ha generado un gran numero de
seguidores.

10

manzanas

20

Peras

Una de las mayores ventajas es que puede ser


ledo por cualquier lenguaje de programacin.
Por lo tanto, puede ser usado para el
intercambio de informacin entre distintas
tecnologas.

30

Naranjas

80

lechugas

Ej:

15

tomates

50

pepinos

Imaginemos que tenemos una tienda y que


queremos obtener el nombre y la cantidad de
fruta y verdura que tenemos. En un principio
vamos a suponer que tenemos lo siguiente:

Fruta:

Verduras

JSON - Ejemplo

hemos creado un objeto llamado frutera y, dentro de ese


objeto hemos almacenado un array de dos elementos. El
primer elemento del array contiene un objeto llamado fruta
y el segundo elemento del array contiene otro objeto
llamado verdura. Estos objetos a su vez contienen un array
cuyo contenido es el nombre y la cantidad de cada fruta o
verdura.

Imaginemos que nos gustara saber la cantidad de


manzanas que tenemos. El path de este array sera el
siguiente:

Path: json['Fruteria'][0]['Fruta'][0]['Cantidad']

MongoDB - Ejemplo

Imaginemos que tenemos una coleccin a la que


llamamos Personas. Un documento podra almacenarse
de la siguiente manera:

El documento anterior es un clsico documento JSON.


Tiene strings, arrays, subdocumentos y nmeros. En
la misma coleccin podramos guardar un documento
como este:

Este documento no sigue el mismo esquema que el


primero. Tiene menos campos, algn campo nuevo
que no existe en el documento anterior e incluso
un campo de distinto tipo.
Esto que es algo impensable en una base de datos
relacional, es algo totalmente vlido en MongoDB.

Caractersticas

Basado en el motor V8 de Google Chrome para JavaScript. Facilidad de aprendizaje por


basarse en este lenguaje.

Almacenamiento flexible basado en JSON sin necesidad de definir esquemas


previamente.

Soporte para creacin de ndices a partir de cualquier atributo.

Alto rendimiento para consultas y actualizaciones.

Consultas flexibles basadas en documentos.

Alta capacidad de crecimiento, replicacin y escalabilidad: puedes escalar


horizontalmente simplemente aadiendo mquinas baratas sin ver afectado el
rendimiento ni complicar la gestin.

Soporte para almacenamiento independiente de archivos de cualquier tamao basado


en GridFS.

Cmo Funciona

Las consultas se hacen pasando objetos JSON como parmetro. Por


ejemplo:

db.Clientes.find({Nombre:"Pedro"});

MongoDB viene con una consola desde la que se pueden ejecutar los
distintos comandos.

Adems de las funciones de MongoDB, se pueden utilizar muchas de las


funciones propias de JavaScript. En la consola tambin se pueden
definir variables, funciones o utilizar bucles.

Para qu se usa

Fundamentalmente cuando se necesita flexibilidad en la definicin de los datos, sencillez a la hora


de acceder a stos, gran rendimiento y posibilidad de crecer muy rpido.

Adecuada para crear aplicaciones de Internet que registren muchos datos o que simplemente se
quiera crear de manera muy flexible, pero tambin para sistemas muy grandes como registradores
de datos de sensores, que pueden llegar a recibir decenas o cientos de miles de lecturas de datos
por segundo, pasando por gestores de datos de ventas, infraestructura de almacenamiento para
redes sociales, juegos masivos online, gestores de contenidos, aplicaciones de anlisis de datos y
reporting...

Actualmente lo utilizan para empresas como eBay, Foursquare, SourceForge, The New York Times,
The Guardian, SAP, o el propio CERN en su colisionador de hadrones, y tambin muchas empresas
pequeas que quieren poder desarrollar de manera gil, barata, sencilla y sin miedo a poder crecer
ms adelante.

Otros usos para las bases de datos NoSQL en http://


highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html

Taller - MongoDB

Gracias a - Franz Joseph Rogelez


Carvajal, de la UNAL
Crear BD MongoDb usando
MongoLab

1.

Ingresar un documento a la coleccin creada con su


informacin, habilidades e intereses.

2.

Describir qu sucede al crear el documento, revisar el


documento despus de ser creado y comentarlo.

3.

Editar el documento y agregar 2 o ms intereses y


habilidades

Conectarse a la BD

4.

Realizar bsquedas que involucre un campo en un


documento dentro de otro documento.

Crear una coleccin

5.

Realizar una bsqueda por nombre o apellido

6.

Utilizar where en una consulta

7.

Realizar otras consultas que involucren aproximaciones de


texto, colocar que sucede.

http://docs.mongodb.org/manual/
reference/operator/query/where
/

Taller

Taller

Taller

Taller

Taller

Taller

Taller

Taller

Taller

Taller

Taller
1.Ingresar un documento a la coleccin creada con su informacin, habilidades
e intereses.
2.Describir qu sucede al crear el documento, revisar el documento despus
de ser creado y comentarlo.
3.Editar el documento y agregar 2 o ms intereses y habilidades
4.Realizar bsquedas que involucre un campo en un documento dentro de otro
documento.
5.Realizar una bsqueda por nombre o apellido
6.Utilizar where en una consulta
7.Realizar otras consultas que involucren aproximaciones de texto, colocar que
sucede.

Taller Algunos comandos

Comprobamos las bases de datos disponibles:

Creamos una nueva base de datos llamada pruebas:

db

Comprobamos las colecciones que contiene la base de datos (al principio no contendr ninguna):

use pruebas

Comprobamos en qu base de datos nos encontramos:

show dbs

show collections

Insertamos nuestros primero documentos en una coleccin. La coleccin se crea automticamente la primera
vez que se accede a ella.

db.personas.insert( { nombre: 'Juan', apellidos: 'Gomez Perez'} )

db.personas.insert( { nombre: 'Belen', apellidos: 'Garcia Sanz'} )

Taller Algunos comandos

Listamos todas las personas de la coleccin personas:

db.personas.find()

Vamos a insertar varios documentos aprovechando la potencia del motor de


JavaScript de la consola de MongoDB:

for (var i = 1 i <= 25 i++) {


for (var j = 1 j <= 25 j++) {
db.puntos.insert( { x : i , y : j } )

Listamos todos los puntos de la coleccin puntos:

db.puntos.find()

Taller Algunos comandos

Eliminamos la coleccin de personas:

Eliminamos la coleccin de puntos:

db.personas.drop()

db.puntos.drop()

Eliminamos la base de datos:

db.dropDatabase()

Trabajo #2

Ejercicio A

La liga de ftbol profesional quiere lanzar una nueva aplicacin para que los aficionados
puedan consultar la informacin de los partidos disputados en la temporada. La informacin
bsica que se debe incluir es la siguiente:
Jugadores: se necesita su nombre, dorsal y fecha de nacimiento.
Equipos: se necesita su nombre, su estadio y los jugadores que componen la plantilla.
Partidos: estn compuestos de dos equipos, un resultados y una lista de goleadores.
Se pide modelar una base de datos MongoDB para incluir esta informacin. Al modelar la
base de datos se debe tener en cuenta el posible uso que se har de la aplicacin. Es
importante elegir cmo relacionar los datos y justificar el porqu de dichas relaciones.

Trabajo #2

Ejercicio B

La compaa area Volando voy quiere lanzar una nueva web para gestionar sus vuelos. La
compaa est especialmente interesada en que ofrecer la mayor cantidad de informacin
posible a sus pasajeros. Dispone de la siguiente informacin que tiene que incluir:
Pasajeros: se necesita su nombre, nacionalidad y nmero de pasaporte.
Aviones: se necesita el modelo, el ao y un listado con las ltimas revisiones.
Vuelos: estn compuesto de un avin, una ciudad de origen, una ciudad de destino y
un listado de los pasajeros que han contratado el trayecto.
Se pide modelar una base de datos MongoDB para incluir esta informacin. Al modelar la
base de datos se debe tener en cuenta el posible uso que se har de la aplicacin. Es
importante elegir cmo relacionar los datos y justificar el porqu de dichas relaciones.

Bibliografa

NoSQL como el futuro de las bases de datos. 2014. En


http://www.maestrosdelweb.com/nosql-como-el-futuro-de-las-bases-de-datos/

Bases de datos NoSQL. Qu son y tipos que nos podemos encontrar. 2014. En
http://www.acens.com/wp-content/images/2014/02/bbdd-nosql-wp-acens.pdf

Bases de datos NoSQL. Elige la opcin que mejor se adapte a tus necesidades. 2014. En
http://www.genbetadev.com/bases-de-datos/bases-de-datos-nosql-elige-la-opcion-que-mejor
-se-adapte-a-tus-necesidades

List of NoSQL Databases. http://nosql-database.org/

Claves para elegir tu base de datos NoSQL. 2015. En


https://www.ondho.com/claves-para-elegir-tu-base-de-datos-nosql/

Visual Guide to NoSQL Systems. En http://blog.nahurst.com/visual-guide-to-nosql-systems

S-ar putea să vă placă și