Slide 1

Slide 1 text

Graph Databases A little connected tour

Slide 2

Slide 2 text

Nombre: Francisco Fernández Castaño biicode @fcofdezc fcofdez www.biicode.com

Slide 3

Slide 3 text

El Origen

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

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?

Slide 6

Slide 6 text

El Origen Fuerte base Matemática Problemas muy estudiados = ,

Slide 7

Slide 7 text

¿Por qué NoSQL?

Slide 8

Slide 8 text

Ventajas de BD Relacionales

Slide 9

Slide 9 text

Ventajas de BD Relacionales Concurrencia Persistencia Integración Estándar Concurrencia

Slide 10

Slide 10 text

Ventajas de BD Relacionales Concurrencia Persistencia Integración Estándar Persistencia

Slide 11

Slide 11 text

Ventajas de BD Relacionales Concurrencia Persistencia Integración Estándar Integración

Slide 12

Slide 12 text

Ventajas de BD Relacionales Concurrencia Persistencia Integración Estándar Estándar

Slide 13

Slide 13 text

DesVentajas de BD Relacionales

Slide 14

Slide 14 text

El Origen Fricción

Slide 15

Slide 15 text

DesVentajas de BD Relacionales Fricción Interoperabilidad Adaptación al cambio Escalabilidad No está destinada para ciertos escenarios Interoperabilidad

Slide 16

Slide 16 text

Adaptación al cambio

Slide 17

Slide 17 text

!Escalabilidad

Slide 18

Slide 18 text

¿Por qué NoSQL?

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

¿Qué es una BD de Grafos?

Slide 21

Slide 21 text

Graph Databases

Slide 22

Slide 22 text

¿Qué es una BD de Grafos? Grafo Nodos Relaciones Propiedades Organiza

Slide 23

Slide 23 text

¿Cúal usaremos? Escrita en Java ACID Interfaz REST Lenguaje declarativo Cypher

Slide 24

Slide 24 text

¿Por qué? El enfoque tradicional en el contexto de datos conectados es artificial 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

Slide 25

Slide 25 text

¿Por qué? El enfoque tradicional en el contexto de datos conectados es artificial La teoría de grafos está muy desarrollada El modelado es más natural

Slide 26

Slide 26 text

¿Esto no es un grafo?

Slide 27

Slide 27 text

¿Y esto?

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Redes sociales Casos de uso Sistemas de recomendaciones Gestión de permisos Problemas GeoEspaciales (Los 7 puentes) Gestión de redes

Slide 31

Slide 31 text

Cypher Lenguaje declarativo ASCII Oriented Parecido a SQL

Slide 32

Slide 32 text

Sintaxis básica (a) --> (b) b a

Slide 33

Slide 33 text

Sintaxis básica (clapton) –[:TOCA_EN]-> (cream) Cream Clapton :TOCA_EN

Slide 34

Slide 34 text

Sintaxis básica (clapton) –[:TOCA_EN]-> (cream)<-[:ETIQUETADO]-(blues) Clapton {nombre: Eric Clapton} Cream :toca_en {fecha: 1968} Blues :etiquetado

Slide 35

Slide 35 text

Sintaxis Cypher START a=node(*) MATCH (a)-->(b) RETURN a, b;

Slide 36

Slide 36 text

Sintaxis Cypher START a=node(*) MATCH (a)-[:TOCA_EN]->(b) RETURN a, b;

Slide 37

Slide 37 text

Sintaxis Cypher START a=node(*) MATCH (a)-[t:TOCA_EN]->(b), (b)<-[:ETIQUETADO]-(c) RETURN a.nombre, t.fecha, c.nombre;

Slide 38

Slide 38 text

Sintaxis Cypher - Inicio START c=node_auto_index(nombre=‘clapton’) MATCH (c)-[t:TOCA_EN]->(g), (g)<-[:ETIQUETADO]-(e) RETURN c.nombre, g.nombre, e.estilo;

Slide 39

Slide 39 text

Sintaxis Cypher - Inicio START c=node_auto_index(nombre=‘clapton’) e=node_auto_index(nombre_estilo=‘blues’) MATCH (c)-[t:TOCA_EN]->(g), (g)<-[:ETIQUETADO]-(e) RETURN c.nombre, g.nombre ORDER BY t.fecha ASC;

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Sintaxis Cypher - Profundidad MATCH (pepe)-[:CONOCE*2]->(juan)

Slide 42

Slide 42 text

Ruta más corta

Slide 43

Slide 43 text

Gestión de infraestructuras de redes Ejemplos

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

(user)-[:USER_OF]->(app) (user)-[:USER_OF]->(app)-[:USES]->(database) (user)-[:USER_OF]->(app)-[:USES]->(database)-[:SLAVE_OF]->(another-database) (user)-[:USER_OF]->(app)-[:RUNS_ON]->(vm) (user)-[:USER_OF]->(app)-[:RUNS_ON]->(vm)-[:HOSTED_BY]->(server) (user)-[:USER_OF]->(app)-[:RUNS_ON]->(vm)-[:HOSTED_BY]->(server)-[:IN]->(rack) (user)-[:USER_OF]->(app)-[:RUNS_ON]->(vm)-[:HOSTED_BY]->(server)-[:IN]->(rack) <-[:IN]-(load-balancer)

Slide 54

Slide 54 text

Antipatrones Modela hechos como nodos Relaciones genéricas vs concretas Usa las relaciones para modelar como interactuan los nodos/hechos

Slide 55

Slide 55 text

Referencias

Slide 56

Slide 56 text

Neo4J as a Service http://www.graphenedb.com/

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

Cuando la única herramienta que tienes es un martillo, todo problema comienza a parecerse a un clavo. Abraham Maslow

Slide 59

Slide 59 text

¿Preguntas?

Slide 60

Slide 60 text

www.biicode.com

Slide 61

Slide 61 text

¡Gracias!