Redis Graph

Report 64 Downloads 92 Views
Redis Graph A graph database built on top of redis

What’s Redis? Open source in-memory database Key => Data Structure server Key features: Fast, Flexible, Simple

A Lego for your database

Key

"I'm a Plain Text String!"

Strings/Blobs/Bitmaps

{ A: “foo”, B: “bar”, C: “baz” }

Hash Tables (objects!)

[A→B→C→D→E] { A,B,C,D,E }

Linked Lists Sets

{ A: 0.1, B: 0.3, C: 100, D: 1337 }

Sorted Sets

{ A: (51.5, 0.12), B: (32.1, 34.7) }

Geo Sets

00110101 11001110 10101010

HyperLogLog

Node

Jerry Seinfeld

“Jerry Seinfeld”: { First_Name: “Jerry”, Age: 62 }

Relations

Visit Jerry

Berlin

Hexastore

S

P

O

Subject

Predicate

Object

SPO SOP OPS OSP PSO POS

6

Hexastore Triplets

SPO:Jerry:Visit:Berlin SOP:Jerry:Berlin:Visit OPS:Berlin:Visit:Jerry OSP:Berlin:Jerry:Visit PSO:Visit:Jerry:Berlin POS:Visit:Berlin:Jerry

Jerry S

Visit P

Berlin O

Hexastore Places Jerry been to? SPO:Jerry:Visit:* Who visited Berlin? OPS:Berlin:Visit:* Who travels and to where? PSO:Visit:*

Jerry S

Visit P

Berlin O

Query language Cypher* MATCH (Jerry:’Jerry Seinfeld’)-[friend]->(F)-[visit]->(country) WHERE (F.age >= Jerry.age AND country.continent = ‘Europe’) RETURN F.name, count(country.name) AS countriesVisited ORDER BY countriesVisited, F.age DESC LIMIT 2

Query language Tokenizer - Lex Parser - Lemon, SQLite LALR(1) parser generator for C opencypher

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

End to end

Query

Lexer

Parser

AST

End to end AST Root

Match

Where

Return

Order

End to end MATCH (Jerry:"Jerry Seinfeld")-[friend]->(F)-[visit]->(Country)

Alias: Jerry ID: Jerry Seinfeld

friend

Alias: F ID: ?

visit

Alias: Country ID: ?

End to end Alias: Jerry ID: Jerry Seinfeld

friend

Alias: F ID: ?

visit

SPO:Jerry Seinfeld:friend:* SPO:Jerry Seinfeld:friend:Cosmo Kramer SPO:Jerry Seinfeld:friend:George Costanza

Alias: Country ID: ?

End to end

Alias: Jerry ID: Jerry Seinfeld

friend

Alias: F ID: Cosmo Kramer

visit

Alias: Country ID: ?

End to end WHERE F.age >= 50 AND Country.continent = “Europe”

Filter tree AND

age >= 50

continent = “Europe”

End to end Cosmo Kramer: { Name: ‘Cosmo Kramer’, Age: 48 }

AND

Kramer .age >= 50

continent = “Europe”

End to end Cosmo Kramer: { Name: ‘Cosmo Kramer’, Age: 48 }

AND

Kramer .age >= 50

F

continent = “Europe”

End to end Cosmo Kramer: { Name: ‘Cosmo Kramer’, Age: 48 }

AND

F Kramer .age >= 50

F

continent = “Europe”

End to end Alias: Jerry ID: Jerry Seinfeld

friend

Alias: F ID: ?

visit

SPO:Jerry Seinfeld:friend:* SPO:Jerry Seinfeld:friend:Cosmo Kramer SPO:Jerry Seinfeld:friend:George Costanza

Alias: Country ID: ?

End to end

Alias: Jerry ID: Jerry Seinfeld

friend

Alias: F ID: George Costanza

visit

Alias: Country ID: ?

End to end AND

George Costanza:{ Name: ‘George Costanza’, Age: 52 } George .age >= 50

continent = “Europe”

End to end AND

George Costanza:{ Name: ‘George Costanza’, Age: 52 } George .age >= 50

T

continent = “Europe”

End to end AND

George Costanza:{ Name: ‘George Costanza’, Age: 52 }

T George .age >= 50

T

continent = “Europe”

T

End to end Alias: Jerry ID: Jerry Seinfeld

friend

Alias: F ID: George Costanza

SPO:George Costanza:visit:* SPO:George Costanza:visit:Italy SPO:George Costanza:visit:Cuba

visit

Alias: Country ID: ?

End to end

Alias: Jerry ID: Jerry Seinfeld

friend

Alias: F ID: George Costanza

visit

Alias: Country ID: Italy

End to end AND

George Costanza:{ Name: ‘George Costanza’, Age: 52 } Italy: { Continent: ‘Europe’, Population: 1000, Name: ‘Italy’ }

T George .age >= 50

T

Italy .continent = “Europe”

T

End to end TOP K heap RETURN F.name, F.age, Country.name ORDER BY F.age DESC LIMIT 5

[‘George Costanza’, 52, Italy]

Features Multi hop, multi entry point

Aggregations, Group bys

Order bys, Distinct

(A)-[R1]->(C)(Movie) F.age + X Shortest path between nodes (A)-[*]-(B) A number of aggregation functions: stdev, precentileCount

Roadmap ● ● ● ●

Hexastore sorted-set -> Trie Indexed entities Single node query Python lib

Contribute/Contact https://github.com/swilly22/redis-module-graph

@roilipman