Date: 2017-Nov-14
Presentation by: Kinane Domloje
Meetup: Introducción a las Bases de Datos Orientadas a Grafos
We Are…
Abed Halawi
Kinane Domloje
Tech Lead – Vinelab
Data Developer – Vinelab
@mulkave
@kinaneD
Graph Databases Beirut ● Meetup
Vinelab -[:LOVES]-> Neo4j
Community Contributions
PHP OGM for Neo4j
Overview
● What is a Graph Database?
● Why use a Graph Database?
● Cypher Query Language
● Neo4j UI Walkthrough
● Relational vs. Graph Databases
● My Personal Journey with Graph Databases
● Best Practices in Data Modeling
What is a Graph
Database?
A Node
:Person
{
id: 9928,
name: John Doe,
email: john@doe.me,
created_at: 03-06-1969
}
What is a Graph?
Why use a Graph
Database?
“All models are wrong but some are useful”
~ George Box
Flexibility
Schema-less Data Structures
Constraints
– Unique node properties
– Node property existence
– Relationship property existence
– Indexing
Performance
Creativity
Pleasant modelling and development
experience.
What can you
model with graph?
Anything, literally!
Cypher Query
Language
Querying the graph database using Cypher
“Cypher is an expressive (yet compact) graph database query language”
Cypher • MATCH-WHERE clause
The MATCH clause allows you to specify the patterns Neo4j will search for in the database.
Other Cypher Clauses
CREATE & MERGE
create graph elements
DELETE
delete graph elements
SET
update labels and properties on nodes and relationships
WITH
Chains subsequent query parts and forward results from one to the next. Similar to
piping commands in Unix.
Aggregation & Statistics
COUNT, AVG, MAX, MIN, DISTINCT, …
Neo4j UI Walkthrough
Break
Relational vs Graph
Databases
Tabular Data
Real world data
Conceptual Data Model
Logical Data Model: Relational
Physical Data Model: Relational
Physical Data Model: Graph
List the interests of “Alice”
SELECT title FROM Interests
LEFT JOIN User_Interests
ON Interests.Id = User_Interests.InterestId
LEFT JOIN Users
ON Users.Id = User_Interests.UserId
WHERE Users.name = “Alice”
SQL Statement
List the interests of “Alice”
MATCH (u:User)-[:INTERESTD_IN]->(i:Interest)
WHERE u.name = “Alice”
RETURN i.title
Cypher Statement
Where has John been lately?
Pattern-Matching
Big-O Operations
Numbers
Flexibility
My Journey With Graph
Physical Data Model: Relational
Physical Data Model: 1st Iteration
Physical Data Model: 2nd Iteration
Graph Physical Data Model
Best Practices in Data
Modeling
Node Labels
Node Labels
VS
Relations Name
Fact Nodes
Questions?
Reference
https://neo4j-users.slack.com
See you next time,
Cheers!