Presented at the First openCypher Implementers Meeting in Walldorf, Germany, February 2017 @ http://www.opencypher.org/blog/2017/03/31/first-ocim-blog/
2. Open source in-memory database
Key => Data Structure server
Key features: Fast, Flexible, Simple
What’s Redis?
3. A Lego for your database
Key
"I'm a Plain Text String!"
{ A: “foo”, B: “bar”, C: “baz” }
Strings/Blobs/Bitmaps
Hash Tables (objects!)
Linked Lists
Sets
Sorted Sets
Geo Sets
HyperLogLog
{ A , B , C , D , E }
[ A → B → C → D → E ]
{ A: 0.1, B: 0.3, C: 100, D: 1337 }
{ A: (51.5, 0.12), B: (32.1, 34.7) }
00110101 11001110 10101010
8. Places Jerry been to?
SPO:Jerry:Visit:*
Who visited Berlin?
OPS:Berlin:Visit:*
Who travels and to where?
PSO:Visit:*
Hexastore
Jerry
S
Berlin
O
Visit
P
10. Tokenizer - Lex
Parser - Lemon, SQLite LALR(1) parser generator for C
opencypher
Query language
11. End to end
MATCH (Jerry:’Jerry Seinfeld’)-[friend]->(F)-[visit]->(Country)
WHERE F.age >= 50 AND Country.continent = “Europe”
RETURN F.name, F.age, Country.name
ORDER BY F.age DESC
LIMIT 5
14. End to end
MATCH (Jerry:"Jerry Seinfeld")-[friend]->(F)-[visit]->(Country)
Alias:
Jerry
ID: Jerry
Seinfeld
Alias: F
ID: ?
Alias:
Country
ID: ?visitfriend
15. End to end
Alias:
Jerry
ID: Jerry
Seinfeld
Alias: F
ID: ?
Alias:
Country
ID: ?visitfriend
SPO:Jerry Seinfeld:friend:*
SPO:Jerry Seinfeld:friend:Cosmo Kramer
SPO:Jerry Seinfeld:friend:George Costanza
21. End to end
Alias:
Jerry
ID: Jerry
Seinfeld
Alias: F
ID: ?
Alias:
Country
ID: ?visitfriend
SPO:Jerry Seinfeld:friend:*
SPO:Jerry Seinfeld:friend:Cosmo Kramer
SPO:Jerry Seinfeld:friend:George Costanza
23. End to end
AND
George
.age >=
50
continent
=
“Europe”
George Costanza:{
Name: ‘George Costanza’,
Age: 52
}
24. End to end
AND
George
.age >=
50
T
continent
=
“Europe”
George Costanza:{
Name: ‘George Costanza’,
Age: 52
}
25. End to end
AND
T
George
.age >=
50
T
continent
=
“Europe”
T
George Costanza:{
Name: ‘George Costanza’,
Age: 52
}
26. End to end
Alias:
Jerry
ID: Jerry
Seinfeld
Alias: F
ID:
George
Costanza
Alias:
Country
ID: ?visitfriend
SPO:George Costanza:visit:*
SPO:George Costanza:visit:Italy
SPO:George Costanza:visit:Cuba
28. End to end
AND
T
George
.age >=
50
T
Italy
.continent
=
“Europe”
T
George Costanza:{
Name: ‘George Costanza’,
Age: 52
}
Italy: {
Continent: ‘Europe’,
Population: 1000,
Name: ‘Italy’
}
29. End to end
TOP K heap
RETURN F.name, F.age,
Country.name
ORDER BY F.age DESC
LIMIT 5
[‘George Costanza’, 52,
Italy]
30. Features
Multi hop, multi entry point (A)-[R1]->(C)<-[R2]-(B)
(Nicolas:’Nicolas Cage’)-[act]->(Movie)<-[act]-(Actor)
Aggregations, Group bys RETURN F.gender, AVG(F.age) AS average_age
Order bys, Distinct
32. There’s still work to be done
● Single node query: MATCH (A) RETURN A
● OPTIONAL MATCH
● WITH, SKIP, UNION
● Curly brackets filters (john {name: ‘John’})
● In place evaluations WHERE Me.age > F.age + X
● Shortest path between nodes (A)-[*]-(B)
● A number of aggregation functions: stdev, precentileCount