!everything

about

Graph Databases

To SQL or NOSQL

is that the question ?

Ye olde RDBMS's

etc etc

Key-value db's

{key, value}

(although, more complex data structures are often built on top of this...)

 

Comes in many flavors:

kv Cache

kv Store

kv Store (Eventually Consistent)

kv Store (Ordered)

...

Column family db's

Uses 'tuples' to store data, almost always distributed

Document-oriented db's

 <Article>
   <Author>
       <FirstName>Bob</FirstName>
       <Surname>Smith</Surname>
   </Author>
   <Abstract>This paper concerns....</Abstract>
   <Section n="1"><Title>Introduction</Title>
       <Para>...
   </Section>
 </Article>
{
"_id" : 1,
"name" : { "first" : "John", "last" : "Backus" },
"contribs" : [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
"awards" : [
           {
             "award" : "W.W. McDowell Award",
             "year" : 1967,
             "by" : "IEEE Computer Society"
           },
           { "award" : "Draper Prize",
             "year" : 1993,
             "by" : "National Academy of Engineering"
           }
]
}

To be Schemaful or Schemaless...

Graph db's

Comparing the apples and PINEAPPLES...

Data Model Performance Scalability Flexibility Complexity Functionality
Key–Value Store high high high none variable (none)
Column-Oriented Store high high moderate low minimal
Document-Oriented Store high variable (high) high low variable (low)
Graph Database variable variable high high graph theory
Relational Database variable variable low moderate relational algebra

So, graphs you say...

Thanks, Leonhard !

Leonhard Euler, 1707-1783

Seven bridges of königsberg

#1: make a model (graph)

#2: count the nodes and relations as you 'walk the graph'

So what's a graph then ?

Formally, a graph is just a collection of vertices and edges

or

a set of nodes and the relationships that connect them.

Why Neo4J ?

Neo4j is a highly scalable, robust (fully ACID) native graph database. Neo4j is used in mission-critical apps by thousands of leading startups, enterprises, and governments around the world.

(labeled) Property Graph

nodes and relationships,

+ properties. (and labels)

Cypher

MATCH (m:Movie)<-[:ACTS_IN]-(actor)-[:ACTS_IN]->(movie)
RETURN movie.title, collect(actor.name), count(*) AS count
ORDER BY count DESC ;
MATCH (node) -[:RELATIONSHIP]- (node)
MATCH (you:Person { name:"Your Name" }), (kevin:Person { name:"Kevin Bacon" }),
  path = shortestPath((you)-[*..6]-(kevin))
RETURN path
() -[]- ()

Don't take my word for it,

try it yourself, it's easy !

Stand Back!

i'm switching to DEMO mode..

Graph Databases

By maderskog

Graph Databases

  • 339