--The SQL Query Language DML--1 The SQL Query Language DML The SQL Query Language DML (SELECT)
Cypher Query Language
-
Upload
graphdevroom -
Category
Documents
-
view
4.791 -
download
1
description
Transcript of Cypher Query Language
Cypher Query LanguageAndrés Taylor and Alistair Jones
FOSDEM 2012Graph Processing Room5 Feb 2012
Wednesday, February 8, 2012
What is Cypher?
• Graph Query Language for Neo4j
• Aims to make querying simple
Wednesday, February 8, 2012
Motivation
Something new?
• Existing Neo4j query mechanisms were not simple enough
• Too verbose (Java API)
• Too prescriptive (Gremlin)
Wednesday, February 8, 2012
Motivation
SQL?
• Unable to express paths
• these are crucial for graph-based reasoning
• neo4j is schema/table free
Wednesday, February 8, 2012
Motivation
SPARQL?
• SPARQL designed for a different data model
• namespaces
• properties as nodes
Wednesday, February 8, 2012
Design
Wednesday, February 8, 2012
Design Decisions
DeclarativeImperative Declarative
follow relationshipbreadth-first vs depth-first
explicit algorithm
specify starting pointspecify desired outcome
algorithm adaptablebased on query
Wednesday, February 8, 2012
Design Decisions
Pattern matching
Wednesday, February 8, 2012
Design Decisions
Pattern matching
A
B C
Wednesday, February 8, 2012
Design Decisions
Pattern matchingA
B C
Wednesday, February 8, 2012
Design Decisions
Pattern matchingA
B C
Wednesday, February 8, 2012
Design Decisions
Pattern matchingA
B C
Wednesday, February 8, 2012
Design Decisions
Pattern matchingA
B C
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
() --> ()
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
A B
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
(A) --> (B)A B
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
A BLOVES
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
A -[:LOVES]-> B
A BLOVES
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
A B C
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
A --> B --> CA B C
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
A
B C
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
A --> B --> C, A --> C
A
B C
Wednesday, February 8, 2012
Design Decisions
ASCII-art patterns
A --> B --> C, A --> C
A
B C
A --> B --> C <-- AWednesday, February 8, 2012
Design Decisions
Variable length paths
A B
A B
A B
...
Wednesday, February 8, 2012
Design Decisions
Variable length paths
A -[*]-> B
A B
A B
A B
...
Wednesday, February 8, 2012
Design Decisions
Optional relationships
A B
Wednesday, February 8, 2012
Design Decisions
Optional relationships
A -[?]-> BA B
Wednesday, February 8, 2012
Design Decisions
Closures
start london = node(1), moscow = node(2)match path = london -[*]-> moscowwhere all(city in nodes(path) where city.capital = true)
Wednesday, February 8, 2012
Design Decisions
Parsed, not an internal DSL
Execution Semantics
Type System
Serialisation
Portability
Wednesday, February 8, 2012
Design Decisions
Familiar for SQL users
selectfrom
wheregroup byorder by
startmatchwherereturn
Wednesday, February 8, 2012
Implementation
Wednesday, February 8, 2012
Implementation
Execution Plan
start n=node(0)return n
Parameters()Nodes(n)Extract([n])ColumnFilter([n])
Wednesday, February 8, 2012
Implementation
Execution Plan
start n=node(0)match n-[*]-> b return n.name, n, count(*) order by n.age
Parameters()Nodes(n)PatternMatch(n-[*]->b)Extract([n.name, n])EagerAggregation( keys: [n.name, n], aggregates: [count(*)])Extract([n.age])Sort(n.age ASC)ColumnFilter([n.name,n,count(*)])
Wednesday, February 8, 2012
Implementation
Execution Plan
start n=node(0) match n-[*]-> b return n.name, n, count(*) order by n.name
Parameters()Nodes(n)PatternMatch(n-[*]->b)Extract([n.name, n])Sort(n.name ASC,n ASC)EagerAggregation( keys: [n.name, n], aggregates: [count(*)])ColumnFilter([n.name,n,count(*)])
Wednesday, February 8, 2012
Thanks for Listening!
Questions?Andrés Taylor [email protected] @andres_taylor
Alistair Jones [email protected] @apcj
Wednesday, February 8, 2012