63
Graph Databases A little connected tour @fcofdezc

Graph databases, a little connected tour

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Graph databases, a little connected tour

Graph DatabasesA little connected tour

!

@fcofdezc

Page 2: Graph databases, a little connected tour

El origen

Page 3: Graph databases, a little connected tour
Page 4: Graph databases, a little connected tour

Dado el mapa de Königsberg, con el río Pregolya dividiendo el plano en cuatro regiones distintas, que están unidas a

través de los siete puentes,

¿es posible dar un paseo comenzando desde cualquiera de estas regiones, pasando por todos los puentes, recorriendo

sólo una vez cada uno, y regresando al mismo punto de partida?

Page 5: Graph databases, a little connected tour

El origenG = (V, E)

Page 6: Graph databases, a little connected tour

¿Qué es?

Page 7: Graph databases, a little connected tour
Page 8: Graph databases, a little connected tour

Grafo

Nodos Relaciones

Propiedades

Guar

daGuarda

Organiza

Tiene

Tiene

Page 9: Graph databases, a little connected tour

Escrita en java

ACID

Interfaz REST

Cypher

Page 10: Graph databases, a little connected tour

¿Por qué NOSQL?

Page 11: Graph databases, a little connected tour

Ventajas BD Relacionales

Page 12: Graph databases, a little connected tour

Ventajas de BD Relacionales

ConcurrenciaPersistenciaIntegraciónEstándar

Persistencia

Page 13: Graph databases, a little connected tour

Ventajas de BD Relacionales

ConcurrenciaPersistenciaIntegraciónEstándar

Concurrencia

Page 14: Graph databases, a little connected tour

Ventajas de BD Relacionales

ConcurrenciaPersistenciaIntegraciónEstándar

Integración

Page 15: Graph databases, a little connected tour

Ventajas de BD Relacionales

ConcurrenciaPersistenciaIntegraciónEstándar

Estándar

Page 16: Graph databases, a little connected tour

DESVentajas BD Relacionales

Page 17: Graph databases, a little connected tour

El OrigenFricción

Page 18: Graph databases, a little connected tour

class Client < ActiveRecord::Base has_one :address has_many :orders has_and_belongs_to_many :rolesend

Page 19: Graph databases, a little connected tour

DesVentajas de BD Relacionales

Fricción!InteroperabilidadAdaptación al cambioEscalabilidadNo está destinada para ciertos escenarios

Interoperabilidad

Page 20: Graph databases, a little connected tour

Adaptación al cambio

Page 21: Graph databases, a little connected tour

!Escalabilidad

Page 22: Graph databases, a little connected tour

Profundidad Tiempo MySQL(s) Tiempo Neo4j (s) Nº Resultados

2 0.016 0.01 ~2500

3 30.267 0.168 ~110,000

4 1543.505 1.359 ~600,000

5 No Acaba 2.132 ~800,000

MySQL vs Neo4j

* Neo4J in Action

Page 23: Graph databases, a little connected tour

El enfoque tradicional en el contexto de datos conectados es artificial

Page 24: Graph databases, a little connected tour

Podemos trasladar el modelo del dominio que estamos tratando de forma natural

Page 25: Graph databases, a little connected tour
Page 26: Graph databases, a little connected tour

Casos de uso

Page 27: Graph databases, a little connected tour

Redes Sociales

Sigue

Sigue

Juan Jose

María

Page 28: Graph databases, a little connected tour

Problemas Geoespaciales

Detección de fraude

Gestión de permisos

Gestión de redes

Page 29: Graph databases, a little connected tour

CypherLenguaje declarativo

ASCII oriented

Pattern matching

Page 30: Graph databases, a little connected tour

CypherCypher

Traverser API

Core API

Kernel

Page 31: Graph databases, a little connected tour

Cypher

a b

(a)-->(b)

Page 32: Graph databases, a little connected tour

Cypher

clapton cream

(clapton)-[:toca_en]->(cream)

toca_en

Page 33: Graph databases, a little connected tour

Sigue

SigueJuan Jose

María

Cypher

(juan:Persona)-[:sigue]->(jose:Persona)!

(maria:Persona)-[:sigue]->(juan:Persona)

Page 34: Graph databases, a little connected tour

Cypher

clapton {nombre: Eric Clapton}

cream

(clapton)-[:toca_en]->(cream)<-[:etiquetado]-(blues)

toca_en {fecha: 1968}

Blues

etiquetado

Page 35: Graph databases, a little connected tour

Cypher

MATCH (a)-—>(b)RETURN a,b;

Page 36: Graph databases, a little connected tour

Cypher

MATCH (a)-[:TOCA_EN]—>(b)RETURN a,b;

Page 37: Graph databases, a little connected tour

Cypher

MATCH (a)-[t:TOCA_EN]—>(g), (g)<-[:ETIQUETADO]-(e)RETURN a.nombre, t.fecha, e.nombre;

Page 38: Graph databases, a little connected tour

Cypher

START c=node:node_auto_index(nombre=‘clapton’)MATCH (c)-[t:TOCA_EN]—>(g), (g)<-[:ETIQUETADO]-(e)RETURN c.nombre, t.fecha, e.nombre;

Page 39: Graph databases, a little connected tour

Cypher

START c=node:node_auto_index(nombre=‘clapton’) e=node:node_auto_index(nombre=‘blues’)MATCH (c)-[t:TOCA_EN]—>(g), (g)<-[:ETIQUETADO]-(e)RETURN c.nombre, e.nombreORDER BY t.fecha

Page 40: Graph databases, a little connected tour

Cypher

START c=node:node_auto_index(nombre=‘clapton’) e=node:node_auto_index(nombre=‘blues’)MATCH (c)-[t:TOCA_EN | PRODUCE]—>(g), (g)<-[:ETIQUETADO]-(e)WHERE t.fecha > 1968RETURN c.nombre, e.nombre

Page 41: Graph databases, a little connected tour

Cypher

MATCH (juan)-[:CONOCE*5]—>(pepe)

Page 42: Graph databases, a little connected tour

START startNode=node:node_auto_index(name = ‘Sol'),

endNode=node:node_auto_index(name = ‘Cuzco')

MATCH p = (startNode)-[rels:CONNECTED_TO]->(endNode)

RETURN p AS shortestPath,

reduce(weight=0, r in rels: weight + r.weight) as tWeight

ORDER BY tWeight ASC

LIMIT 1

Page 43: Graph databases, a little connected tour

Sistema de recomendación

Page 44: Graph databases, a little connected tour

Red social de cine

Page 45: Graph databases, a little connected tour

Red social de cine

Usuarios puntúan películas

Personas actúan en películas

Personas dirigen películas

Usuarios siguen a otros usuarios

Page 46: Graph databases, a little connected tour

Red social de cine

¿Cómo lo modelamos?

Page 47: Graph databases, a little connected tour

Red social de cine

Sigue

Puntúa {nota}

User

Film

User

Actor

Director

Actua en

Dirige

Page 48: Graph databases, a little connected tour

Red social de cine

START fran=node:Persona(name='Fran'), film=node:Peliculas(title=‘Pulp Fiction') MATCH fran-[or:PUNTUA]->film<-[:PUNTUA]-otro_user-[r:PUNTUA]->otras_pelis RETURN distinct otras_pelis.title;

Page 49: Graph databases, a little connected tour

Red social de cine

Puntúa {nota}

Puntúa {nota}

User 1

Film PF

Fran User 2

Puntúa {nota}

Film

Film

Puntúa {nota}

Puntúa {nota}

Page 50: Graph databases, a little connected tour

Red social de cine

START fran=node:Persona(name='Fran'), film=node:Peliculas(title=‘Pulp Fiction') MATCH fran-[or:PUNTUA]->film<-[:PUNTUA]-otro_user-[r:PUNTUA]->otras_pelis WHERE or.stars = r.stars RETURN distinct otras_pelis.title;

Page 51: Graph databases, a little connected tour

Red social de cine

START fran=node:Persona(name='Fran'), film=node:Peliculas(title=‘Pulp Fiction') MATCH fran-[or:PUNTUA]->film<-[:PUNTUA]-otro_user-[r:PUNTUA]->otras_pelis, otro_user-[:SIGUE]-fran WHERE or.stars = r.stars RETURN distinct otras_pelis.title;

Page 52: Graph databases, a little connected tour

Red social de cine

Puntúa {nota}

User 1

Film PF

FranPuntúa {nota}

Film

Sigue

Puntúa {nota}

Page 53: Graph databases, a little connected tour

Red social de cine

START tarantino=node:Persona(name='Quentin Tarantino') MATCH tarantino-[:DIRIGE]->peli<-[:ACTUA_EN]-tarantino RETURN movie.title; !

Page 54: Graph databases, a little connected tour

Red social de cine

Film Actor

Director

Actua en

Dirige

Page 55: Graph databases, a little connected tour

Red social de cine

Ahora se deben poder categorizar las películas

Page 56: Graph databases, a little connected tour

Red social de cine

Film

SubGenero

Pertenece_a

SubGenero

Pertenece_a

GeneroGenero

Pertenece_aPertenece_a

Page 57: Graph databases, a little connected tour

Red social de cine

START fran=node:Persona(name='Fran'), film=node:Peliculas(title=‘Pulp Fiction') MATCH fran-[or:PUNTUA]->film<-[:PUNTUA]-otro_user-[r:PUNTUA]->otras_pelis, film-[:PERTENECE:*3]->genero<-[:PERTENECE]-otras_pelis WHERE or.stars = r.stars RETURN distinct otras_pelis.title;

Page 58: Graph databases, a little connected tour

Instead of just picking a relational database because everyone does, we need to

understand the nature of the data we’re storing and how we want to manipulate it.

Martin Fowler

Page 59: Graph databases, a little connected tour

Referencias

Page 60: Graph databases, a little connected tour

Neo4J as a service

http://www.graphenedb.com

Page 61: Graph databases, a little connected tour

Neo4J Spain

http://www.meetup.com/graphdb-spain/

20 Febrero

Page 62: Graph databases, a little connected tour
Page 63: Graph databases, a little connected tour

Gracias