graph database, a little connected tour - castano
DESCRIPTION
Slides from Francisco Fernandez Castano talk @ codemotion roma 2014TRANSCRIPT
![Page 1: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/1.jpg)
Graph DatabasesA little connected tour
!
@fcofdezc
![Page 2: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/2.jpg)
Francisco Fernández Castaño @fcofdezc Sw Engineer @biicode
![Page 3: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/3.jpg)
Beginning
![Page 4: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/4.jpg)
![Page 5: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/6.jpg)
El origenG = (V, E)
![Page 7: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/7.jpg)
![Page 8: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/8.jpg)
What is a Graph DB?
![Page 9: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/9.jpg)
Graph
Nodes Relationships
Properties
Stor
e Store
Connect
HaveHave
![Page 10: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/10.jpg)
Written in Java
ACID
Rest interface
Cypher
![Page 11: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/11.jpg)
Why NOSQL?
![Page 12: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/12.jpg)
The value of Relational Databases
![Page 13: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/13.jpg)
Ventajas de BD Relacionales
ConcurrenciaPersistenciaIntegraciónEstándar
Persistence
![Page 14: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/14.jpg)
Ventajas de BD Relacionales
ConcurrenciaPersistenciaIntegraciónEstándar
Concurrency
![Page 15: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/15.jpg)
Ventajas de BD Relacionales
ConcurrenciaPersistenciaIntegraciónEstándar
Integration
![Page 16: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/16.jpg)
Ventajas de BD Relacionales
ConcurrenciaPersistenciaIntegraciónEstándar
Standard
![Page 17: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/17.jpg)
inconveniences Relational DBs
![Page 18: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/18.jpg)
El OrigenImpedance Mismatch
![Page 19: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/21.jpg)
Adaptation to changes
![Page 22: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/22.jpg)
!Scalability
![Page 23: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/23.jpg)
The traditional way in the context of connected data is artificial
![Page 24: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/26.jpg)
O(log n)
![Page 27: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/27.jpg)
O(1)
![Page 28: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/28.jpg)
O(m log n)
![Page 29: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/29.jpg)
O(m)
![Page 30: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/30.jpg)
We can transform our domain model in a natural way
![Page 31: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/31.jpg)
![Page 32: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/32.jpg)
Use cases
![Page 33: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/33.jpg)
Social Networks
Follow
Follow
John Jeff
Douglas
![Page 34: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/34.jpg)
Geospatial problems
Fraud detection
Authorization
Network management
![Page 35: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/35.jpg)
CypherDeclarative language
ASCII oriented
Pattern matching
![Page 36: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/36.jpg)
CypherCypher
Traverser API
Core API
Kernel
![Page 37: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/37.jpg)
Cypher
a b
(a)-->(b)
![Page 38: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/38.jpg)
Cypher
clapton cream
(clapton)-[:play_in]->(cream)
play_in
![Page 39: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/39.jpg)
Follow
FollowJohn Jeff
Douglas
Cypher
(john:User)-[:FOLLOW]->(jeff:User)!
(douglas:User)-[:FOLLOW]->(john:User)
![Page 40: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/41.jpg)
Cypher
MATCH (a)-—>(b)RETURN a,b;
![Page 42: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/42.jpg)
Cypher
MATCH (a)-[:PLAY_IN]—>(b)RETURN a,b;
![Page 43: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/45.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/47.jpg)
Cypher
MATCH (carlo)-[:KNOW*5]—>(john)
![Page 48: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/49.jpg)
Recommendation System
![Page 50: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/50.jpg)
Social network
![Page 51: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/51.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/52.jpg)
Movies social network
How do we model it?
![Page 53: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/53.jpg)
Movies social network
Follow
Rate {stars}
User
Film
User
Actor
Director
Act in
Direct
![Page 54: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/54.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/55.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/57.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/58.jpg)
Movies social network
Rate {star}
User 1
Film PF
FranRate {stars}
Film
Follow
Rate {star}
![Page 59: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/59.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/60.jpg)
Movies social network
Film Actor
Director
Act_in
Direct
![Page 61: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/61.jpg)
Movies social network
Now you should be able to categorize the movies
![Page 62: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/62.jpg)
Movies social network
Film
SubGenre
Belongs_to
SubGenre
Belongs_to
GenreGenre
Belongs_toBelongs_to
![Page 63: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/63.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/64.jpg)
Neo4J extensions
Managed
Unmanaged
![Page 65: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/65.jpg)
Neo4J extensions
Managed
Unmanaged
![Page 66: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/66.jpg)
Neo4J extensions
Managed
Unmanaged
![Page 67: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/67.jpg)
Drivers/Clients
![Page 68: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/68.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/69.jpg)
References
![Page 70: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/70.jpg)
Neo4J as a service
http://www.graphenedb.com
![Page 71: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/71.jpg)
![Page 72: Graph Database, a little connected tour - Castano](https://reader033.vdocuments.net/reader033/viewer/2022052321/55514699b4c905bd1c8b5044/html5/thumbnails/72.jpg)
Grazie