Contenu connexe Similaire à An Introduction to Neo4j (20) Plus de Thoughtworks (20) An Introduction to Neo4j2. Agenda
● What / Why
● Learn through an FoF example
● More involved problem: Which airport
performans better
● Advance modeling topics
8. ● Wicked fast on a type of problem
● Scale up independent of amount of data
● Intuitive modeling
● Fun and Freedom (embedded mode)
9. Setup (on a mac)
$> brew update
$> brew install neo4j
$> neo4j start
$> open http://localhost:7474
10. 3 way to use
* Standalone with Cypher *
* Server plugin
* Embedded
14. Who is Joe’s friend?
MATCH (joe { name: 'Joe' })-[:knows]-(friends)
RETURN joe, friends
15. Joe’s friends of friends
MATCH (joe { name: 'Joe' })-[:knows*2..2]-(fof)
RETURN fof
16. Wait, Joe already knows sara
MATCH (joe { name: 'Joe' })-[:knows*2..2]-(fof)
WHERE NOT(joe-[:knows]-fof)
RETURN fof
17. Who is more likely to be Joe's
friend?
MATCH (joe { name: 'Joe' })-[:knows*2..2]-(fof)
WHERE NOT(joe-[:knows]-fof)
RETURN fof.name, count(*)
ORDER BY count(*) DESC, fof.name
21. Ask questions
● How many flight canceled
● How many flight delayed
● Average taxi waiting time
● Shortest path between
22. Other way to use neo4j
● Embedded (CTA)
● Server plugin (Grok)
23. Neo4j modeling tips
● Understand the performance character
○ Traversing is fast
○ IO is slow
○ Node properties are lazy loaded/cached
● Normalization verse denormalization in
relational database performance tuning
Notes de l'éditeur create (_0:Person {`name`:"Bill"})create (_1:Person {`name`:"Sara"})create (_2:Person {`name`:"Derrick"})create (_3:Person {`name`:"Ian"})create (_4:Person {`name`:"Jill"})create (_5:Person {`name`:"Joe"})create _0-[:`knows`]->_2create _0-[:`knows`]->_3create _1-[:`knows`]->_0create _1-[:`knows`]->_3create _1-[:`knows`]->_4create _5-[:`knows`]->_0create _5-[:`knows`]->_1 // Flight data setup
//Airports
CREATE (ATL:Airport {name:'Hartsfield-Jackson Atlanta International Airport', abbr:'ATL', city:'Atlanta'}),
(ORD:Airport {name:'O\'Hare International Airport', abbr:'ORD', city:'Chicago'}),
(LAX:Airport {name:'Los Angeles International Airport', abbr:'LAX', city:'Los Angeles'}),
(DFW:Airport {name:'Dallas/Fort Worth International Airport', abbr:'DFW', city:'Dallas/Fort Worth'})
//Delay & Cancellation Causes
CREATE (Carrier:Cause {name:'Carrier'}),
(Weather:Cause {name:'Weather'}),
(NAS:Cause {name:'NAS'}),
(Security:Cause {name:'Security'}),
(LateAircraft:Cause {name:'Late Aircraft'})
//Flights
CREATE (flight1:Flight {flight_number:2412, month:'August'}),
(flight2:Flight {flight_number:2321, month:'April'}),
(flight3:Flight {flight_number:1890, month:'February'}),
(flight4:Flight {flight_number:2420, month:'November'}),
(flight5:Flight {flight_number:1092, month:'July'}),
(flight6:Flight {flight_number:2497, month:'March'}),
(flight7:Flight {flight_number:1609, month:'May'}),
(flight8:Flight {flight_number:557, month:'April'}),
(flight9:Flight {flight_number:1894, month:'September'}),
(flight10:Flight {flight_number:1011, month:'August'}),
(flight11:Flight {flight_number:2324, month:'August'}),
(flight12:Flight {flight_number:1332, month:'September'}),
(flight13:Flight {flight_number:2430, month:'May'}),
(flight14:Flight {flight_number:607, month:'November'}),
(flight15:Flight {flight_number:2336, month:'February'}),
(flight16:Flight {flight_number:2222, month:'December'}),
(flight17:Flight {flight_number:2404, month:'December'}),
(flight18:Flight {flight_number:2401, month:'March'}),
(flight19:Flight {flight_number:693, month:'March'}),
(flight20:Flight {flight_number:565, month:'January'}),
(flight21:Flight {flight_number:1829, month:'November'}),
(flight22:Flight {flight_number:2495, month:'December'}),
(flight23:Flight {flight_number:2327, month:'July'}),
(flight24:Flight {flight_number:1062, month:'November'}),
(flight25:Flight {flight_number:1282, month:'November'}),
(flight26:Flight {flight_number:2450, month:'December'}),
(flight27:Flight {flight_number:2336, month:'January'}),
(flight28:Flight {flight_number:2357, month:'October'}),
(flight29:Flight {flight_number:557, month:'June'}),
(flight30:Flight {flight_number:2339, month:'March'})
//Origins & Destinations
CREATE (flight1)-[:ORIGIN]->(LAX),(flight1)-[:DESTINATION]->(DFW),
(flight2)-[:ORIGIN]->(ORD),(flight2)-[:DESTINATION]->(DFW),
(flight3)-[:ORIGIN]->(LAX),(flight3)-[:DESTINATION]->(ORD),
(flight4)-[:ORIGIN {taxi_time:56, dep_delay:32}]->(LAX),(flight4)-[:DESTINATION]->(DFW),
(flight5)-[:ORIGIN {taxi_time:17, dep_delay:1}]->(LAX),(flight5)-[:DESTINATION]->(ORD),
(flight6)-[:ORIGIN {taxi_time:21, dep_delay:43}]->(DFW),(flight6)-[:DESTINATION]->(LAX),
(flight7)-[:ORIGIN {taxi_time:20, dep_delay:0}]->(ATL),(flight7)-[:DESTINATION {taxi_time:16, arr_delay:0}]->(DFW),
(flight8)-[:ORIGIN {taxi_time:8, dep_delay:0}]->(ORD),(flight8)-[:DESTINATION {taxi_time:5, arr_delay:0}]->(LAX),
(flight9)-[:ORIGIN {taxi_time:33, dep_delay:15}]->(LAX),(flight9)-[:DESTINATION {taxi_time:5, arr_delay:31}]->(ORD),
(flight10)-[:ORIGIN {taxi_time:14, dep_delay:0}]->(ATL),(flight10)-[:DESTINATION {taxi_time:6, arr_delay:0}]->(DFW),
(flight11)-[:ORIGIN {taxi_time:11, dep_delay:0}]->(DFW),(flight11)-[:DESTINATION {taxi_time:6, arr_delay:0}]->(ORD),
(flight12)-[:ORIGIN {taxi_time:15, dep_delay:53}]->(DFW),(flight12)-[:DESTINATION {taxi_time:13, arr_delay:60}]->(ATL),
(flight13)-[:ORIGIN {taxi_time:26, dep_delay:0}]->(LAX),(flight13)-[:DESTINATION {taxi_time:5, arr_delay:0}]->(DFW),
(flight14)-[:ORIGIN {taxi_time:17, dep_delay:3}]->(ORD),(flight14)-[:DESTINATION {taxi_time:7, arr_delay:27}]->(LAX),
(flight15)-[:ORIGIN {taxi_time:11, dep_delay:0}]->(DFW),(flight15)-[:DESTINATION {taxi_time:3, arr_delay:0}]->(ORD),
(flight16)-[:ORIGIN {taxi_time:11, dep_delay:0}]->(DFW),(flight16)-[:DESTINATION {taxi_time:8, arr_delay:0}]->(ATL),
(flight17)-[:ORIGIN {taxi_time:20, dep_delay:0}]->(LAX),(flight17)-[:DESTINATION {taxi_time:6, arr_delay:0}]->(DFW),
(flight18)-[:ORIGIN {taxi_time:13, dep_delay:0}]->(DFW),(flight18)-[:DESTINATION {taxi_time:14, arr_delay:0}]->(LAX),
(flight19)-[:ORIGIN {taxi_time:26, dep_delay:0}]->(ATL),(flight19)-[:DESTINATION {taxi_time:9, arr_delay:0}]->(DFW),
(flight20)-[:ORIGIN {taxi_time:15, dep_delay:0}]->(ATL),(flight20)-[:DESTINATION {taxi_time:4, arr_delay:0}]->(DFW),
(flight21)-[:ORIGIN {taxi_time:16, dep_delay:0}]->(ATL),(flight21)-[:DESTINATION {taxi_time:12, arr_delay:0}]->(DFW),
(flight22)-[:ORIGIN {taxi_time:18, dep_delay:22}]->(DFW),(flight22)-[:DESTINATION {taxi_time:10, arr_delay:37}]->(LAX),
(flight23)-[:ORIGIN {taxi_time:15, dep_delay:0}]->(ORD),(flight23)-[:DESTINATION {taxi_time:6, arr_delay:0}]->(DFW),
(flight24)-[:ORIGIN {taxi_time:19, dep_delay:35}]->(LAX),(flight24)-[:DESTINATION {taxi_time:8, arr_delay:19}]->(ORD),
(flight25)-[:ORIGIN {taxi_time:10, dep_delay:0}]->(DFW),(flight25)-[:DESTINATION {taxi_time:6, arr_delay:0}]->(ATL),
(flight26)-[:ORIGIN {taxi_time:12, dep_delay:0}]->(LAX),(flight26)-[:DESTINATION {taxi_time:8, arr_delay:0}]->(DFW),
(flight27)-[:ORIGIN {taxi_time:8, dep_delay:0}]->(DFW),(flight27)-[:DESTINATION {taxi_time:6, arr_delay:0}]->(ORD),
(flight28)-[:ORIGIN {taxi_time:12, dep_delay:0}]->(ORD),(flight28)-[:DESTINATION {taxi_time:8, arr_delay:0}]->(DFW),
(flight29)-[:ORIGIN {taxi_time:11, dep_delay:0}]->(ORD),(flight29)-[:DESTINATION {taxi_time:6, arr_delay:0}]->(LAX),
(flight30)-[:ORIGIN {taxi_time:17, dep_delay:0}]->(ORD),(flight30)-[:DESTINATION {taxi_time:6, arr_delay:0}]->(DFW)
//Carrier Delays
CREATE (flight22)-[:DELAYED_BY {time:22}]->(Carrier),
(flight24)-[:DELAYED_BY {time:3}]->(Carrier)
//Weather Delays
//NAS Delays
CREATE (flight9)-[:DELAYED_BY {time:16}]->(NAS),
(flight12)-[:DELAYED_BY {time:7}]->(NAS),
(flight14)-[:DELAYED_BY {time:27}]->(NAS),
(flight22)-[:DELAYED_BY {time:15}]->(NAS)
//Late Aircraft Delays
CREATE (flight9)-[:DELAYED_BY {time:15}]->(LateAircraft),
(flight12)-[:DELAYED_BY {time:53}]->(LateAircraft),
(flight24)-[:DELAYED_BY {time:16}]->(LateAircraft)
//Cancellations
CREATE (flight1)-[:CANCELLED_BY]->(Carrier),
(flight2)-[:CANCELLED_BY]->(NAS),
(flight3)-[:CANCELLED_BY]->(Weather)
//Diversions
CREATE (flight4)-[:DIVERTED_TO {taxi_time:14, div_arr_delay:280}]->(LAX),
(flight5)-[:DIVERTED_TO {taxi_time:17, div_arr_delay:145}]->(LAX),
(flight6)-[:DIVERTED_TO {taxi_time:6, div_arr_delay:257}]->(DFW)