Presentación sobre bases de datos NoSQL para la asociación RiojaDotNet (http://www.meetup.com/es/RiojaDotNet/events/222050968/).
Para la demostración se usaron las siguientes bases de datos NoSQL:
* Neo4J
* ElasticSearch
* Redis
La base de datos sobre la que giró la presentación está disponible en:
http://openbeerdb.com/
Y los migradores para pasar los datos de SQL server a las diferentes bases de datos NoSQL están disponibles en:
https://github.com/albertortizcape/es.csharp.nosqlbeer
1. Introducción a las bases
de datos NoSql
Alberto Ortiz Capellán
@albertortizcape
2. Índice
• ¿Qué es eso de NoSQL?
• Diferencias entre bases de datos SQL y NoSQL
– ACID
– BASE
• Bases de datos NoSQL
– Tipos de bases de datos NoSQL
– Neo4J
– ElasticSearch
– Redis
2
3. Índice
• ¿Qué es eso de NoSQL?
• Diferencias entre bases de datos SQL y NoSQL
– ACID
– BASE
• Bases de datos NoSQL
– Tipos de bases de datos NoSQL
– Neo4J
– ElasticSearch
– Redis
3
4. ¿Qué es eso de NoSQL?
• NoSQL (Not Only SQL) fue nombrado en 1998
por Carlo Strozzi para referirse a su base de
datos no relacional
• Subconjunto de bases de datos que difieren
del modelo clásico de bases de datos (RDBMS)
por no usar SQL
• Son usadas por Google, Amazon, Twitter,
Facebook… para enfrentarse a problemas de
rendimiento
4
5. ¿Qué es eso de NoSQL?
• Tanto las bases de datos relacionales (RBDMS)
como las NoSQL son de Almacenamiento
estructurado
– En las bases de datos relacionales la estructura se
define en las tablas
– En las bases de datos no sql no es necesario
definir una estructura, aunque si que es
recomendable
5
6. Índice
• ¿Qué es eso de NoSQL?
• Diferencias entre bases de datos SQL y NoSQL
– ACID
– BASE
• Bases de datos NoSQL
– Tipos de bases de datos NoSQL
– Neo4J
– ElasticSearch
– Redis
6
7. Diferencias entre bases de datos SQL y
NoSQL
SQL NoSQL
Permite unir tablas con JOIN
No permite el uso de JOINS o están muy
limitados
Dificultad para distribuir los datos Facilidad para distribuir los datos
Escalabilidad vertical (mejorar potencia
del servidor para obtener mejores
resultados)
Escalabilidad horizontal (repartir /
distribuir base de datos en diferentes
servidores)
Los datos se estructuran siguiendo los
esquemas de las tablas
Los datos no siguen ningún esquema
Posibilidad de crear restricciones, triggers,
claves foráneas… sobre los datos
Estas utilidades no suelen estar
disponibles
7
8. ACID
• Características que tiene que garantizar una
base de datos a la hora de realizar una
transacción correctamente
Atomicity
Asegurar que la transacción se realice o
no, sin quedar a medias ante fallos
Consistency
Asegurar el estado de validez de los
datos en todo momento
Isolation
Asegurar independencia entre
transacciones
Durability
Asegurar la persistencia de la transacción
ante cualquier fallo
11
10. BASE
• Acrónimo análogo a ACID para NoSQL donde
prima la disponibilidad frente a la consistencia
• Características comunes entre todas las
implementaciones de bases de datos
distribuidas no relacionales
Basically Available Disponibilidad como prioridad
Soft state
Delegación de la consistencia de datos a
un motor externo
Eventual consistency Se intenta lograr un estado consistente
13
12. Índice
• ¿Qué es eso de NoSQL?
• Diferencias entre bases de datos SQL y NoSQL
– ACID
– BASE
• Bases de datos NoSQL
– Tipos de bases de datos NoSQL
– Neo4J
– ElasticSearch
– Redis
15
13. Tipos de bases de datos NoSQL
Documentales
Datos semi-estructurados en
documentos (XML, YAML, JSON y
BSON)
Grafo Datos estructurados como nodos
relacionados entre si
Clave / valor Datos estructurados como clave /
valor
Familia de columnas
Datos estructurados en columnas
donde cada fila puede tener una
configuración diferente
16
14. Neo4j
• Estructura de datos orientada a Grafos
• Posibilidad de gestionar millones de
grafos/nodos/relaciones/propiedades en una
sola máquina
• Completamente transaccional
• Máxima escalabilidad
• Software libre
17
15. Neo4j
• Un Grafo guarda datos en Nodos que tienen
Propiedades
– Una Propiedad es una relación clave / valor donde
la clave es un identificador de tipo string
• Los Nodos se organizan en Relaciones que
también tienen Propiedades
• Un Índice mapea Propiedades tanto de Nodos
como de Relaciones para conseguir consultas
de datos más eficientes
18
19. Neo4j - CYPHER
• CYPHER: Lenguaje de consultas de Neo4j para
consultar los grafos
• Referenciar un nodo (nodo)
• Uso de Labels para identificar los nodos
(label:nodo)
22
Brewery Beer Style
Brewery
Geocode
(BreweryGeocode) (Brewery) (Beer) (Style)
(bg:BreweryGeocode) (br:Brewery) (be:Beer) (st:Style)
20. Neo4j - CYPHER
• Relaciones entre nodos simples --> ó <--
• Identificando el nombre de la relación
–[:RELACION]->
23
Brewery Beer Style
Brewery
Geocode
<-- <--
<--
<-[:TIENE_FABRICA]- <-[:ESTILIZA]--[:FABRICA]->
23. Elastic Search
• Permite indexar y analizar grandes cantidades
de datos de manera distribuida
• Almacena documentos pudiendo estructurar
su contenido con un schema / mapping
• Indexa los datos en tiempo real
• Utiliza JSON y un API web RESTFul
• Permite agrupar / facetar el contenido de los
documentos
26
24. Elastic Search
• Un Cluster almacena un conjunto de Nodos
que mantienen la información distribuida
• Un Nodo almacena la información y se encara
de las tareas de indexación
– No hay límite de Nodos
• Un Índice es una colección de Documentos
con características similares
27
26. Elastic Search - Consultas simples
• Consultas a través de llamadas RESTFul
http://localhost:9200/<index>/<type>/<id>
Index: nosqlbeers
Type: beer, brewery, style, brewerygeocode
Id: Identificador del documento
http://localhost:9200/nosqlbeers/beer/5151
29
27. Elastic Search - Consultas simples
• Ejemplos de busquedas
– Busqueda sobre el índice nosqlbeers
• http://localhost:9200/nosqlbeers/_search?q=*
– Busqueda sobre el tipo beer
• http://localhost:9200/nosqlbeers/beer/_search?q=*
– Busqueda sobre el tipo beer, por el parámetro name
• http://localhost:9200/nosqlbeers/beer/_search?q=nam
e:Estrella
30
28. Elastic Search – Consultas complejas
• Querys con datos extra en formato JSON como
rangos y agregaciones
• Imposible pasar esos parámetros por URL
– Uso de curl desde línea de comandos
– Plugin Sense de Elastic Search para Chrome
31
29. Elastic Search – Consultas complejas
• Agrupación de cervezas por su graduación
POST /nosqlbeers/beer/_search?pretty
{
"size": 0,
"aggs": {
"Agrupacion_Graduacion_Cervezas": {
"terms": {
"field": "abv"
}
}
}
}
• Consulta en SQLServer: SELECT COUNT(*) from beers GROUP BY
abv ORDER BY COUNT(*) DESC
32
31. Redis
• Base de datos de tipo clave / valor
• Almacena los datos en memoria RAM
• Permite poner una fecha de expiración a los
datos
• Se usa como memoria caché para cargas
pesadas por su velocidad
34
32. Redis
• Posee diferentes Nodos donde se almacenan
los datos en formato clave / valor
35
DB 0 DB X
DB 1
•Clave1 / valor
•Clave2 / valor
…
•ClaveN / valor
33. Redis - Comandos
• SELECT numero (0 al 15): Selecciona el nodo de redis
datos donde se van a trabajar
• KEYS cadena: busca las claves que coincidan con la
cadena introducida
• SET clave valor: almacena los datos en redis
• GET clave: devuelve el valor almacenado en esa clave.
Nil o -1 en caso de que no haya datos
• DEL clave: borra la clave
• CUIDADO:
– Es sensible a mayusculas y minusculas
– Si la clave existe la remplaza
36
34. Redis - Comandos
• Expire clave segundos: Establece los segundos
que va a permanecer la clave en redis
• Ttl clave: Obtiene el tiempo en segundos que le
queda a la clave antes de desaparecer
• lpush clave valor: Agrega el valor a la lista por la
izquierda
• Rpush clave valor: Agrega el valor a la lista por la
derecha
• Lrange clave inicio fin: Devuelve la lista de
elemetos del inicio al fin
37
35. Referencias - NoSQL
• NoSQL http://www.genbetadev.com/bases-de-datos/el-
concepto-nosql-o-como-almacenar-tus-datos-en-una-base-
de-datos-no-relacional
• ACID VS BASE http://www.dataversity.net/acid-vs-base-the-
shifting-ph-of-database-transaction-processing/
• CAP http://www.johndcook.com/blog/2009/07/06/brewer-
cap-theorem-base/
• DB Ranking http://db-engines.com/en/ranking
• NoSQL http://www.nosql.es/blog/nosql/que-es-nosql.html
• NoSQL http://nosql-database.org/
• NoSQL http://www.genbetadev.com/bases-de-datos/bases-
de-datos-nosql-elige-la-opcion-que-mejor-se-adapte-a-tus-
necesidades
• BASE http://queue.acm.org/detail.cfm?id=1394128
38