Graph Database, a little connected tour - Castano

72
Graph Databases A little connected tour @fcofdezc

description

Slides from Francisco Fernandez Castano talk @ codemotion roma 2014

Transcript of Graph Database, a little connected tour - Castano

Page 1: Graph Database, a little connected tour - Castano

Graph DatabasesA little connected tour

!

@fcofdezc

Page 2: Graph Database, a little connected tour - Castano

Francisco Fernández Castaño @fcofdezc Sw Engineer @biicode

Page 3: Graph Database, a little connected tour - Castano

Beginning

Page 4: Graph Database, a little connected tour - Castano
Page 5: Graph Database, a little connected tour - Castano

The old town of Königsberg has seven bridges:

Can you take a walk through town, visiting each part of the town and crossing each bridge only once?

Page 6: Graph Database, a little connected tour - Castano

El origenG = (V, E)

Page 7: Graph Database, a little connected tour - Castano
Page 8: Graph Database, a little connected tour - Castano

What is a Graph DB?

Page 9: Graph Database, a little connected tour - Castano

Graph

Nodes Relationships

Properties

Stor

e Store

Connect

HaveHave

Page 10: Graph Database, a little connected tour - Castano

Written in Java

ACID

Rest interface

Cypher

Page 11: Graph Database, a little connected tour - Castano

Why NOSQL?

Page 12: Graph Database, a little connected tour - Castano

The value of Relational Databases

Page 13: Graph Database, a little connected tour - Castano

Ventajas de BD Relacionales

ConcurrenciaPersistenciaIntegraciónEstándar

Persistence

Page 14: Graph Database, a little connected tour - Castano

Ventajas de BD Relacionales

ConcurrenciaPersistenciaIntegraciónEstándar

Concurrency

Page 15: Graph Database, a little connected tour - Castano

Ventajas de BD Relacionales

ConcurrenciaPersistenciaIntegraciónEstándar

Integration

Page 16: Graph Database, a little connected tour - Castano

Ventajas de BD Relacionales

ConcurrenciaPersistenciaIntegraciónEstándar

Standard

Page 17: Graph Database, a little connected tour - Castano

inconveniences Relational DBs

Page 18: Graph Database, a little connected tour - Castano

El OrigenImpedance Mismatch

Page 19: Graph Database, a little connected tour - Castano

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

Page 20: Graph Database, a little connected tour - Castano

DesVentajas de BD Relacionales

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

Interoperability

Page 21: Graph Database, a little connected tour - Castano

Adaptation to changes

Page 22: Graph Database, a little connected tour - Castano

!Scalability

Page 23: Graph Database, a little connected tour - Castano

The traditional way in the context of connected data is artificial

Page 24: Graph Database, a little connected tour - Castano

Depth MySQL time (s) Neo4j time (s) Results

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 25: Graph Database, a little connected tour - Castano

Person

Id Person

1 Frank

2 John

.. …

99 Alice

PersonFriend

PersonID FriendID

1 2

2 1

.. …

99 2

Page 26: Graph Database, a little connected tour - Castano

O(log n)

Page 27: Graph Database, a little connected tour - Castano

O(1)

Page 28: Graph Database, a little connected tour - Castano

O(m log n)

Page 29: Graph Database, a little connected tour - Castano

O(m)

Page 30: Graph Database, a little connected tour - Castano

We can transform our domain model in a natural way

Page 31: Graph Database, a little connected tour - Castano
Page 32: Graph Database, a little connected tour - Castano

Use cases

Page 33: Graph Database, a little connected tour - Castano

Social Networks

Follow

Follow

John Jeff

Douglas

Page 34: Graph Database, a little connected tour - Castano

Geospatial problems

Fraud detection

Authorization

Network management

Page 35: Graph Database, a little connected tour - Castano

CypherDeclarative language

ASCII oriented

Pattern matching

Page 36: Graph Database, a little connected tour - Castano

CypherCypher

Traverser API

Core API

Kernel

Page 37: Graph Database, a little connected tour - Castano

Cypher

a b

(a)-->(b)

Page 38: Graph Database, a little connected tour - Castano

Cypher

clapton cream

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

play_in

Page 39: Graph Database, a little connected tour - Castano

Follow

FollowJohn Jeff

Douglas

Cypher

(john:User)-[:FOLLOW]->(jeff:User)!

(douglas:User)-[:FOLLOW]->(john:User)

Page 40: Graph Database, a little connected tour - Castano

Cypher

clapton {name: Eric Clapton}

cream

(clapton)-[:play_in]->(cream)<-[:labeled]-(blues)

play_in {date: 1968}

Blues

labeled

Page 41: Graph Database, a little connected tour - Castano

Cypher

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

Page 42: Graph Database, a little connected tour - Castano

Cypher

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

Page 43: Graph Database, a little connected tour - Castano

Cypher

MATCH (a)-[:PLAY_IN]—>(g), (g)<-[:LABELED]-(e)RETURN a.name, t.date, e.name;

Page 44: Graph Database, a little connected tour - Castano

Cypher

MATCH (c {name: ‘clapton’})-[t:PLAY_IN]—>(g), (g)<-[:LABELED]-(e)RETURN c.name, t.date, e.name;

Page 45: Graph Database, a little connected tour - Castano

Cypher

MATCH (c {name: ‘clapton’})-[t:PLAY_IN]—>(g), (g)<-[:LABELED]-(e {name: ‘blues’})RETURN c.name, e.nameORDER BY t.date

Page 46: Graph Database, a little connected tour - Castano

Cypher

MATCH (c {name: ‘clapton’})-[r:PLAY_IN | PRODUCE]—>(g), (g)<-[:LABELED]-(e {name: ‘blues’})RETURN c.name, e.nameWHERE r.date > 1968ORDER BY r.date

Page 47: Graph Database, a little connected tour - Castano

Cypher

MATCH (carlo)-[:KNOW*5]—>(john)

Page 48: Graph Database, a little connected tour - Castano

MATCH p = (startNode:Station {name: ‘Sol’}) -[rels:CONNECTED_TO*]-> (endNode:Station {name: ‘Retiro’})RETURN p AS shortestPath, reduce(weight=0, r in rels: weight + r.weight) as tWeightORDER BY tWeight ASCLIMIT 1

Page 49: Graph Database, a little connected tour - Castano

Recommendation System

Page 50: Graph Database, a little connected tour - Castano

Social network

Page 51: Graph Database, a little connected tour - Castano

Movies social network

Users rate movies

People act in movies

People direct movies

Users follow other users

Page 52: Graph Database, a little connected tour - Castano

Movies social network

How do we model it?

Page 53: Graph Database, a little connected tour - Castano

Movies social network

Follow

Rate {stars}

User

Film

User

Actor

Director

Act in

Direct

Page 54: Graph Database, a little connected tour - Castano

Movies social network

MATCH (fran:User {name: ‘Fran’}) -[or:Rate]-> (pf:Film {title: ‘Pulp Fiction’}),! (pf)<-[:Rate]-(other_users)-[:Rate]->(other_films)!RETURN distinct other_films.title;

Page 55: Graph Database, a little connected tour - Castano

Movies social network

Rate {stars}

Rate {stars}

User 1

Film PF

Fran User 2

Rate {stars}

Film

Film

Rate {stars}

Rate {stars}

Page 56: Graph Database, a little connected tour - Castano

Movies social network

MATCH (fran:User {name: ‘Fran’}) -[or:Rate]-> (pf:Film {title: ‘Pulp Fiction’}),! (pf)<-[:Rate]-(other_users)-[r:Rate]->(other_films)!WHERE or.stars = r.stars!RETURN distinct other_films.title;

Page 57: Graph Database, a little connected tour - Castano

Movies social network

MATCH (fran:User {name: ‘Fran’}) -[or:Rate]-> (pf:Film {title: ‘Pulp Fiction’}),! (pf)<-[:Rate]-(other_users)-[r:Rate]->(other_films),! (other_users)-[:FOLLOW]-(fran)!WHERE or.stars = r.stars!RETURN distinct other_films.title;

Page 58: Graph Database, a little connected tour - Castano

Movies social network

Rate {star}

User 1

Film PF

FranRate {stars}

Film

Follow

Rate {star}

Page 59: Graph Database, a little connected tour - Castano

Movies social network

MATCH (tarantino:User {name: ‘Quentin Tarantino’}),(tarantino)-[:DIRECT]->(movie)<-[:ACT_IN]-(tarantino)RETURN movie.title

Page 60: Graph Database, a little connected tour - Castano

Movies social network

Film Actor

Director

Act_in

Direct

Page 61: Graph Database, a little connected tour - Castano

Movies social network

Now you should be able to categorize the movies

Page 62: Graph Database, a little connected tour - Castano

Movies social network

Film

SubGenre

Belongs_to

SubGenre

Belongs_to

GenreGenre

Belongs_toBelongs_to

Page 63: Graph Database, a little connected tour - Castano

Movies social network

MATCH (fran:User {name: ‘Fran’}) -[or:Rate]-> (pf:Film {title: ‘Pulp Fiction’}),! (pf)<-[:Rate]-(other_users)-[r:Rate]->(other_films), (film)->[:BELONGS_TO*3]->(genre)<-[:BELONGS_TO]-(other_films),! (other_users)-[:FOLLOW]-(fran)!WHERE or.stars = r.stars!RETURN distinct other_films.title;

Page 64: Graph Database, a little connected tour - Castano

Neo4J extensions

Managed

Unmanaged

Page 65: Graph Database, a little connected tour - Castano

Neo4J extensions

Managed

Unmanaged

Page 66: Graph Database, a little connected tour - Castano

Neo4J extensions

Managed

Unmanaged

Page 67: Graph Database, a little connected tour - Castano

Drivers/Clients

Page 68: Graph Database, a little connected tour - Castano

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 69: Graph Database, a little connected tour - Castano

References

Page 70: Graph Database, a little connected tour - Castano

Neo4J as a service

http://www.graphenedb.com

Page 71: Graph Database, a little connected tour - Castano
Page 72: Graph Database, a little connected tour - Castano

Grazie