20150429 nosql riojadotnet

38
Introducción a las bases de datos NoSql Alberto Ortiz Capellán @albertortizcape

Upload: albertortizcape

Post on 12-Aug-2015

226 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: 20150429 NoSQL RiojaDotNet

Introducción a las bases de datos NoSql

Alberto Ortiz Capellán @albertortizcape

Page 2: 20150429 NoSQL RiojaDotNet

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

Page 3: 20150429 NoSQL RiojaDotNet

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

Page 4: 20150429 NoSQL RiojaDotNet

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

Page 5: 20150429 NoSQL RiojaDotNet

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

Page 6: 20150429 NoSQL RiojaDotNet

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

Page 7: 20150429 NoSQL RiojaDotNet

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

Page 8: 20150429 NoSQL RiojaDotNet

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

Page 9: 20150429 NoSQL RiojaDotNet

12

ACID

• Bases de datos que garantizan ACID

Page 10: 20150429 NoSQL RiojaDotNet

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

Page 11: 20150429 NoSQL RiojaDotNet

14

BASE

• Bases de datos que garantizan BASE

Page 12: 20150429 NoSQL RiojaDotNet

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

Page 13: 20150429 NoSQL RiojaDotNet

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

Page 14: 20150429 NoSQL RiojaDotNet

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

Page 15: 20150429 NoSQL RiojaDotNet

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

Page 16: 20150429 NoSQL RiojaDotNet

19

GRAFO

RELACIÓN•Propiedad1:Valor•Propiedad2:Valor•….•PropiedadN:Valor

Nodo

•Propiedad1:Valor•Propiedad2:Valor•….•PropiedadN:Valor

Nodo•Propiedad1:Valor•Propiedad2:Valor•….•PropiedadN:Valor

Page 17: 20150429 NoSQL RiojaDotNet

20

Page 18: 20150429 NoSQL RiojaDotNet

21

Brewery Beer

FABRICA

Style

ESTILIZA

Brewery Geocode

TIENE_FABRICA

Page 19: 20150429 NoSQL RiojaDotNet

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)

Page 20: 20150429 NoSQL RiojaDotNet

23

Neo4j - CYPHER

• Relaciones entre nodos simples --> ó <-- • Identificando el nombre de la relación

–[:RELACION]->

Brewery Beer StyleBrewery Geocode

<-- <--

<--

<-[:TIENE_FABRICA]- <-[:ESTILIZA]--[:FABRICA]->

Page 21: 20150429 NoSQL RiojaDotNet

24

Neo4j - CYPHER

(Brewery) –[: FABRICA]-> (Beer)

(cerveceria:Brewery) -[relacion: FABRICA]-> (cerveza:Beer)

cerveceria, relacion, cerveza: Labels

Brewery, Beer: Nodos

FABRICA: Relación

Brewery BeerFABRICA

Page 22: 20150429 NoSQL RiojaDotNet

25

Neo4j - CYPHERMATCH (style:Style) --> (beer:Beer) <-[:FABRICA]- (brewery:Brewery) -[:TIENE_FABRICA]-> (geocode:BreweryGeocode)WHERE beer.name = 'Estrella Damm'RETURN beer, brewery, geocode, style

Page 23: 20150429 NoSQL RiojaDotNet

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

Page 24: 20150429 NoSQL RiojaDotNet

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

Page 25: 20150429 NoSQL RiojaDotNet

28

CLUSTER

NODOS

Índice

Índice•Documento1•Documento2…•DocumentoN

Índice Índice

Índice

Page 26: 20150429 NoSQL RiojaDotNet

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

Page 27: 20150429 NoSQL RiojaDotNet

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

Page 28: 20150429 NoSQL RiojaDotNet

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

Page 29: 20150429 NoSQL RiojaDotNet

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

Page 30: 20150429 NoSQL RiojaDotNet

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 } ] } } }}

Page 31: 20150429 NoSQL RiojaDotNet

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

Page 32: 20150429 NoSQL RiojaDotNet

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

Page 33: 20150429 NoSQL RiojaDotNet

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

Page 34: 20150429 NoSQL RiojaDotNet

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

Page 35: 20150429 NoSQL RiojaDotNet

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

Page 36: 20150429 NoSQL RiojaDotNet

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

Page 37: 20150429 NoSQL RiojaDotNet

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