Mastering Neo4j A Graph Database
description
Transcript of Mastering Neo4j A Graph Database
Mastering Neo4jA Graph Database
Data Masters
Special Thanks To…
Planet Linux Caffehttp://planetlinuxcaffe.com
We now have a sponsor!!
John Jadvani954-527-0090
Short bio about me… Andrew Simkovsky 15 years working with database technology
Oracle, MySQL/MariaDB, SQL Server, Postgres Redis, MongoDB, CouchDB, Cassandra, Neo4j
Worked across many industries Consulting, Retail, Telecommunications,
Energy Data, Marketing, Gaming, Health care
Graph Databases
Graph Databases
What is a graph database? Based on graph theory Data is stored as “nodes”, and
relationships as “edges” Nodes have attributes. Relationships have attributes
Relational vs Graph
Relational Relationships are used to join entities together to get
results Data integrity is enforced through constraints
Graph Relationships are considered data Can easily “walk” from node to node using
relationships Can “walk” the graph in multiple directions in parallel
Relational Model
actor movieactor_movie
1, Keanu Reeves2, Carrie-Ann Moss3, Lawrence Fishburne
actor_idname
movie_idtitlerelease_date
actor_idmovie_idrole
1, The Matrix2, The Matrix Reloaded3, The Matrix Revolutions
1, 1, Neo1, 2, Neo1, 3, Neo2, 1, Trinity2, 2, Trinity2, 3, Trinity3, 1, Morpheus3, 2, Morpheus3, 3, Morpheus
Graph Model
The Matrix
The Matrix 2
The Matrix 3
Keanu Reeves
Carrie-Ann Moss
Lawrence
Fishburne
Graph Model - Detailed
type: Actorname: “Keanu Reeves”
type: Movietitle:
“Matrix” :ACTS_IN
type: Role, role: “Neo”
Node Relationship
Property ValueProperty
Path
Example Graphs
Example Graphs
Example Graphs
Graph Databases – Examples Uses
Social relationships Actor / movie relationships Medicine interactions
Just some of the many possibilities!
CypherA Graph Query Language
Queries
START[MATCH][WITH][WHERE]RETURN
[ORDER BY] [SKIP] [LIMIT]
Starting node(s)
Matching pattern (except properties)
Filter on propertiesProperties to return
Further conditions / calculations
Query Example
START user=node:nodeIndexName(name={“Bob”})MATCH (user)-[:FRIEND]->(friend)WITH user, count(friend) as friendsWHERE friends > 10RETURN friend.nameORDER BY friend.nameLIMIT 100
Query Parts
START user=node:nodeIndexName(name={“Bob”})made-
up identifi
er
object type
node property identifier
index name
property
value
Query Parts
MATCH (user)-[:FRIEND]->(friend)
node node
relationship definition(including direction) Another
made-up identifier
Query Parts
WITH user, count(friend) as friends
grouping node
calculation
alias
Query Parts
WHERE friends > 10
property filter
Query Parts
RETURN friend.nameORDER BY friend.nameLIMIT 100
Query Example – All Together
START user=node:nodeIndexName(name={“Bob”})MATCH (user)-[:FRIEND]->(friend)WITH user, count(friend) as friendsWHERE friends > 10RETURN friend.nameORDER BY friend.nameLIMIT 100
This will return all nodes where they are friends with Bob, and that Bob has more than 10 friends, but limit to the first 100 found.
Query Example – Matching
START user=node:nodeIndexName(name={“Bob”})MATCH (user)-[:FRIEND {since: “2001-01-01”} ]->(friend)RETURN friend.name
Since relationships have properties, we can search on them too!!
Creating Data
CREATE [UNIQUE]*[SET | DELETE | FOREACH]*[RETURN [ORDER BY][SKIP][LIMIT]]
Creating Data - Examples
CREATE (n {name: “Bob”})
made-up identifier
again
property
value
Creating Data - Examples
CREATE (b {name: “Bob”}), (m {name: “Mary”}), (b)-[:KNOWS]->(m)
Creates two nodes with a relationship between them.This is called creating a path.
Creating Data - ExamplesYou can combine queries with create options! This allows you to create parts of the graph starting from a particular node (or nodes)!
START b=node:nodeIndexName(name={“Bob”}), m=node:nodeIndexName(name={“Mary”})MATCH (b)-[:KNOWS]->(m)CREATE (b)-[:LOVES]->(m)
Live Demo!
Where Do I Get It?
www.neo4j.org
Thank You For Coming!
Please rate this Meet Up:www.meetup.com/data-masters
(or go there to join!)Check out my blog and forums:
www.dbtekpro.comAfter Party!!
Miller’s Ale HouseMiracle Mile