20150429 nosql riojadotnet
Post on 12-Aug-2015
226 Views
Preview:
TRANSCRIPT
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
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
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
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
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
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
11
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
12
ACID
• Bases de datos que garantizan ACID
13
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
14
BASE
• Bases de datos que garantizan BASE
15
Í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
16
Tipos de bases de datos NoSQL
DocumentalesDatos 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 columnasDatos estructurados en columnas donde cada fila puede tener una configuración diferente
17
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
18
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
19
GRAFO
RELACIÓN•Propiedad1:Valor•Propiedad2:Valor•….•PropiedadN:Valor
Nodo
•Propiedad1:Valor•Propiedad2:Valor•….•PropiedadN:Valor
Nodo•Propiedad1:Valor•Propiedad2:Valor•….•PropiedadN:Valor
20
21
Brewery Beer
FABRICA
Style
ESTILIZA
Brewery Geocode
TIENE_FABRICA
22
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)
Brewery Beer StyleBrewery Geocode
(BreweryGeocode) (Brewery) (Beer) (Style)
(bg:BreweryGeocode) (br:Brewery) (be:Beer) (st:Style)
23
Neo4j - CYPHER
• Relaciones entre nodos simples --> ó <-- • Identificando el nombre de la relación
–[:RELACION]->
Brewery Beer StyleBrewery Geocode
<-- <--
<--
<-[:TIENE_FABRICA]- <-[:ESTILIZA]--[:FABRICA]->
24
Neo4j - CYPHER
(Brewery) –[: FABRICA]-> (Beer)
(cerveceria:Brewery) -[relacion: FABRICA]-> (cerveza:Beer)
cerveceria, relacion, cerveza: Labels
Brewery, Beer: Nodos
FABRICA: Relación
Brewery BeerFABRICA
25
Neo4j - CYPHERMATCH (style:Style) --> (beer:Beer) <-[:FABRICA]- (brewery:Brewery) -[:TIENE_FABRICA]-> (geocode:BreweryGeocode)WHERE beer.name = 'Estrella Damm'RETURN beer, brewery, geocode, style
26
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
27
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
28
CLUSTER
NODOS
Índice
Índice•Documento1•Documento2…•DocumentoN
Índice Índice
Índice
29
Elastic Search - Consultas simples
• Consultas a través de llamadas RESTFul
http://localhost:9200/<index>/<type>/<id>Index: nosqlbeersType: beer, brewery, style, brewerygeocodeId: Identificador del documento
http://localhost:9200/nosqlbeers/beer/5151
30
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
31
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
32
Elastic Search – Consultas complejas
• Agrupación de cervezas por su graduaciónPOST /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
33
Elastic Search – Consultas complejas• Rango de cervezas por su graduación:
POST /nosqlbeers/beer/_search?pretty{ "size": 0, "facets" : { "Rango_Cervezas_Graduacion" : { "range" : { "field" : "abv", "ranges" : [ { "to" : 5 }, { "from" : 5, "to" : 8 }, { "from" : 8, "to" : 10 }, { "from" : 10, "to" : 20 }, { "from" : 20, "to" : 50 }, { "from" : 50 } ] } } }}
34
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
35
Redis
• Posee diferentes Nodos donde se almacenan los datos en formato clave / valor
DB 0 DB X
DB 1
•Clave1 / valor•Clave2 / valor…•ClaveN / valor
36
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
37
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
38
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
39
Referencias – Neo4j
• Neo4j y .NET http://blog.micic.ch/net/using-neo4j-graph-db-with-c-net
• Ejemplos .NET https://github.com/Readify/Neo4jClient/wiki/cypher-examples
• Ejemplos .NET http://stackoverflow.com/questions/19534511/how-to-create-a-node-with-neo4jclient-in-neo4j-v2
• Ejemplos .NET http://stackoverflow.com/questions/20968733/how-to-create-relationship-between-neo4j-existing-node-and-new-node-in-c-net-us
• Ejemplos .NET http://architects.dzone.com/articles/neo4jd-net-client-neo4j-graph-0
40
Referencias – Elastic Search• Getting started http://joelabrahamsson.com/elasticsearch-101/• Curl
http://stackoverflow.com/questions/22882927/how-to-insert-data-into-elasticsearch
• Problemas con http y curl http://stackoverflow.com/questions/6684235/perl-curl-1-protocol-http-not-supported-or-disabled-in-libcurl
• Elastic Search .NET http://www.elastic.co/guide/en/elasticsearch/client/net-api/current/_elasticsearch_net.html
• Elastic Search .NET http://nest.azurewebsites.net/• Primeros pasos con Elastic Search
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=primeros-pasos-elasticsearch
• Facetas http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets.html
• Rangos http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-range-facet.html
41
Bibliografia
• Neo4j: Graph Databases http://info.neotechnology.com/rs/neotechnology/images/GraphDatabases.pdf
top related