PRESENTED BY
RedisGraph internals
Roi Lipman
RedisLabs, Lead developer
PRESENTED BY
Query execution

A-Z
PRESENTED BY
“Query”
Query transmission
PRESENTED BY
AST construction
PRESENTED BY
AST enrichment
PRESENTED BY
Result
Filter
Scan
Execution plan construction
PRESENTED BY
Result
Filter
Scan
Result-set
Name Age Title Score
PRESENTED BY
Execution plan
PRESENTED BY
1 Unwrap
2 Heat
3 Enjoy
Popcorn
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Op
PRESENTED BY
Op Generate
PRESENTED BY
Op Consume
PRESENTED BY
Op accumulate
PRESENTED BY
Op Depleted
PRESENTED BY
Op Reset
PRESENTED BY
MATCH ( n )

WHERE n.score > 85

RETURN n
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Result
Filter
Scan
PRESENTED BY
Execution plan construction
PRESENTED BY
Result
Filter
Scan
MATCH ( n )

WHERE n.score > 85

RETURN n
PRESENTED BY
1 Start simple
2 Optimise
Execution plan construction
PRESENTED BY
MATCH (X:person)-[:visit]->(S:state)

WHERE state.population > 9M

RETURN DISTINCT X, count(S) AS C
ORDER BY C DESC
PRESENTED BY
MATCH

TraverseScan
(X)
 (X)-[:visit]->(S)

PRESENTED BY
WHERE
TraverseScan
state.population > 9M
Filter
PRESENTED BY
RETURN
Traverse
X, count(S)
Filter Aggregate
PRESENTED BY
RETURN
Filter
DISTINCT
Aggregate Distinct
PRESENTED BY
ORDER BY
Aggregate
C DESC
Distinct Sort
PRESENTED BY
Aggregate Distinct SortFilterTraverseScan
Naive Execution plan
PRESENTED BY
Aggregate Distinct SortFilterTraverseScan
Redundant
PRESENTED BY
Redundancy removed
Aggregate SortFilterTraverseScan
PRESENTED BY
Reverse traversal
(X)->(S)(X) S.P > 9M
FilterTraverseScan
PRESENTED BY
Reverse traversal
(S) S.P > 9M
Filter
(S)->(X)
TraverseScan
PRESENTED BY
Algebraic expression
PRESENTED BY
MATCH ( a )-[ X ]->( b )-[ Y ]->( c )

RETURN a,c
PRESENTED BY
( a )-[ X ]->( b )-[ Y ]->( c )
PRESENTED BY
( a )-[ X ]->( b )
PRESENTED BY
X
[
. 1 .
1 . 1
1 . . ]
( a )
( b )
PRESENTED BY
( b )-[ Y ]->( c )
PRESENTED BY
Y
[
. 1 1
. . 1
. 1 . ]
( b )
( c )
PRESENTED BY
MATCH ( a )-[ X ]->( b )-[ Y ]->( c )

RETURN a,c
PRESENTED BY
Y
[
. 1 1
. . 1
. 1 . ]
b
c
[
. 1 .
1 . 1
1 . . ]
X
b
a
PRESENTED BY
[
. . 1
. 1 1
. 1 1]
XY
c
a
PRESENTED BY
Reversed traversal
Aggregate SortTraverseFilterScan
PRESENTED BY
Utilise index
Aggregate SortTraverseFilterScan
(S) S.P > 9M
PRESENTED BY
Optimised execution plan
Aggregate SortTraverse
Index

Scan
PRESENTED BY
Naive VS Optimised
0
12.5
25
37.5
50
Naive Redundant 

Distinct
Early filter Utilise

Index
Thank you!
PRESENTED BY
2D
PRESENTED BY
MATCH ( a )-[ X ]->( b )-[ Y ]->( c )

RETURN a,c
PRESENTED BY
MATCH ( a )-[ X ]->( b )-[ Y ]->( c )

RETURN a,b,c
PRESENTED BY
1 Single expression
2 Break down
Expression construction
PRESENTED BY
MATCH

( a )->( b )->( c )->( d )

RETURN a,c,d
PRESENTED BY
[AB] * [BC] * [CD]
PRESENTED BY
[AB] * [BC]
[CD]
1
2
PRESENTED BY
[AB] * [BC]
A
B
C
PRESENTED BY
[C] [CD]
C
D
PRESENTED BY
()-[X]->()<-[Y]-()
PRESENTED BY
PRESENTED BY
1 Section 1
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque
laudantium.
2 Section 2
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque
laudantium.
3 Section 3
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque
laudantium.
Agenda:
PRESENTED BY
1 Query parsing
2 AST enrichment, modification & validation
3 Execution plan construction, optimisation & invocation
Steps
4 Result-set compaction & transmission

RedisGraph Internals: Roi Lipman