Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Graph Databases, a little connected tour (Codem...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Francisco Fernández Castaño
April 11, 2014
Programming
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Graph Databases, a little connected tour (Codemotion Rome)
Slides of my talk at Codemotion Rome 2014
http://rome.codemotionworld.com/2014/
Francisco Fernández Castaño
April 11, 2014
More Decks by Francisco Fernández Castaño
See All by Francisco Fernández Castaño
Bases de datos de grafos, un recorrido conectado
fcofdez
0
98
Graph Databases
fcofdez
1
240
Graph Databases
fcofdez
3
320
Metaprogramming Ruby
fcofdez
1
120
Other Decks in Programming
See All in Programming
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
130
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
120
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
180
AIの中の人になってみる
htkym
0
170
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.1k
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
440
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
140
ソフトウェアラスタライザ
fadis
1
800
新卒PdEのリアル
ryu1013
1
480
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
25k
Writing Fast Ruby
sferik
630
63k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
980
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Transcript
Graph Databases A little connected tour ! @fcofdezc
Francisco Fernández Castaño @fcofdezc Sw Engineer @biicode
Beginning
None
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?
El origen G = (V, E)
None
What is a Graph DB?
Graph Nodes Relationships Properties Store Store Connect Have Have
Written in Java ACID Rest interface Cypher
Why NOSQL?
The value of Relational Databases
Ventajas de BD Relacionales Concurrencia Persistencia Integración Estándar Persistence
Ventajas de BD Relacionales Concurrencia Persistencia Integración Estándar Concurrency
Ventajas de BD Relacionales Concurrencia Persistencia Integración Estándar Integration
Ventajas de BD Relacionales Concurrencia Persistencia Integración Estándar Standard
inconveniences Relational DBs
El Origen Impedance Mismatch
class Client < ActiveRecord::Base has_one :address has_many :orders has_and_belongs_to_many :roles
end
DesVentajas de BD Relacionales Fricción! Interoperabilidad Adaptación al cambio Escalabilidad
No está destinada para ciertos escenarios Interoperability
Adaptation to changes
!Scalability
The traditional way in the context of connected data is
artificial
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
Person Id Person 1 Frank 2 John .. … 99
Alice PersonFriend PersonID FriendID 1 2 2 1 .. … 99 2
O(log n)
O(1)
O(m log n)
O(m)
We can transform our domain model in a natural way
None
Use cases
Social Networks Follow Follow John Jeff Douglas
Geospatial problems Fraud detection Authorization Network management
Cypher Declarative language ASCII oriented Pattern matching
Cypher Cypher Traverser API Core API Kernel
Cypher a b (a)-->(b)
Cypher clapton cream (clapton)-[:play_in]->(cream) play_in
Follow Follow John Jeff Douglas Cypher (john:User)-[:FOLLOW]->(jeff:User) ! (douglas:User)-[:FOLLOW]->(john:User)
Cypher clapton {name: Eric Clapton} cream (clapton)-[:play_in]->(cream)<-[:labeled]-(blues) play_in {date: 1968}
Blues labeled
Cypher MATCH (a)-—>(b) RETURN a,b;
Cypher MATCH (a)-[:PLAY_IN]—>(b) RETURN a,b;
Cypher MATCH (a)-[:PLAY_IN]—>(g), (g)<-[:LABELED]-(e) RETURN a.name, t.date, e.name;
Cypher MATCH (c {name: ‘clapton’})-[t:PLAY_IN]—>(g), (g)<-[:LABELED]-(e) RETURN c.name, t.date, e.name;
Cypher MATCH (c {name: ‘clapton’})-[t:PLAY_IN]—>(g), (g)<-[:LABELED]-(e {name: ‘blues’}) RETURN c.name,
e.name ORDER BY t.date
Cypher MATCH (c {name: ‘clapton’})-[r:PLAY_IN | PRODUCE]—>(g), (g)<-[:LABELED]-(e {name: ‘blues’})
RETURN c.name, e.name WHERE r.date > 1968 ORDER BY r.date
Cypher MATCH (carlo)-[:KNOW*5]—>(john)
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 tWeight ORDER BY tWeight ASC LIMIT 1
Recommendation System
Social network
Movies social network Users rate movies People act in movies
People direct movies Users follow other users
Movies social network How do we model it?
Movies social network Follow Rate {stars} User Film User Actor
Director Act in Direct
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;
Movies social network Rate {stars} Rate {stars} User 1 Film
PF Fran User 2 Rate {stars} Film Film Rate {stars} Rate {stars}
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;
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;
Movies social network Rate {star} User 1 Film PF Fran
Rate {stars} Film Follow Rate {star}
Movies social network MATCH (tarantino:User {name: ‘Quentin Tarantino’}), (tarantino)-[:DIRECT]->(movie)<-[:ACT_IN]-(tarantino) RETURN
movie.title
Movies social network Film Actor Director Act_in Direct
Movies social network Now you should be able to categorize
the movies
Movies social network Film SubGenre Belongs_to SubGenre Belongs_to Genre Genre
Belongs_to Belongs_to
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;
Neo4J extensions Managed Unmanaged
Neo4J extensions Managed Unmanaged
Neo4J extensions Managed Unmanaged
Drivers/Clients
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
References
Neo4J as a service http://www.graphenedb.com
None
Grazie