Graph cafe-lightning

22

description

lightning talk at graph cafe London about date and time modelling in Neo4j

Transcript of Graph cafe-lightning

Page 1: Graph cafe-lightning
Page 2: Graph cafe-lightning
Page 3: Graph cafe-lightning
Page 4: Graph cafe-lightning

http://xkcd.com/230/

The problem with perspective is that it’s bidirectional

Page 5: Graph cafe-lightning

representing dates/times (using neo4j 1.9.5)

Page 6: Graph cafe-lightning

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 Event 2 Event 3

:happens

representing dates/times

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

Page 7: Graph cafe-lightning

find all events on a specific day

START root=node(0)MATCH root-[:year_2013]-()-[:month_05]-()-[:day_24]-()- [:happens]-event RETURN event

Page 8: Graph cafe-lightning

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 Event 2 Event 3

:happens

representing dates/times

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

Page 9: Graph cafe-lightning

find all events for a given range

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 Event 2 Event 3

:happens

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

:next :next

Page 10: Graph cafe-lightning

find all events for a given range

START root=node(0)MATCH root-[:year_2013]-()-[:month_05]-()-[:day_24]-start, root-[:year_2013]-()-[:month_05]-()-[:day_26]-end, start-[:next*0..]-middle-[:next*0..]-end, middle-[:happens]-event RETURN event

Page 11: Graph cafe-lightning

find all events for a given range

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 Event 2 Event 3

:happens

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

:next :next

Page 12: Graph cafe-lightning

find all events for a given range

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 Event 2 Event 3

:happens

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

:next :next

Page 13: Graph cafe-lightning

find all events for a given range

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 Event 2 Event 3

:happens

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

:next :next

Page 14: Graph cafe-lightning

find all events for a given range

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 Event 2 Event 3

:happens

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

:next :next

Page 15: Graph cafe-lightning

find all events for a given range

START root=node(0)MATCH root-[:year_2013]-()-[:month_05]-()-[:day_24]-start, root-[:year_2013]-()-[:month_05]-()-[:day_26]-end, start-[:next*0..]-middle-[:next*0..]-end, middle-[:happens]-event RETURN event

Page 16: Graph cafe-lightning

does an event happen on a certain date?

START event=node(20)MATCH event-[:day_24]-()-[:month_05]-()-[:year_2013]-() RETURN event

Page 17: Graph cafe-lightning

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 (20) Event 2 Event 3

:happens

does an event happen on a certain date?

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

Page 18: Graph cafe-lightning

property vs. relationship type

constructing cypher queries execution plan cache vs. property load creating and deleting calendar graph

Page 19: Graph cafe-lightning

START root=node(0)MATCH root-[:year_2013]-()-[:month_05]-()-[:day_24]-()- [:hour] - (hour_node) - [:happens]-event WHERE hour_node.hour = {hour}RETURN event

mixed property/relationship type

Page 20: Graph cafe-lightning

START ref_node = node(0)CREATE UNIQUE ref_node - [:year_2013] -> (year_node {year: {year}}) - [:month_11] -> (month_node {month: {month}}) - [:day_27] -> (day_node {day: {day}}) - [:hour] -> (hour_node {hour: {hour}}) RETURN hour_node

calendar creation

Page 21: Graph cafe-lightning

root (0)

Year: 2013Month: 05

Month 01

:year_2014

:month_01

:year_2013

Year: 2014

Month: 06Day: 24 Day: 25

:day_24

Day: 26

Event 1 Event 2 Event 3

:happens

deleting calendar

:month_06

:month_05

:day_25 :day_26

:happens :happens :happens

Page 22: Graph cafe-lightning

QUESTIONS?

Volker Pacher !

[email protected] www.shutl.com