lynintroduksjon til grafdatabaser og neo4j

39
En lynintroduksjon til grafdatabaser og Neo4j Aleksander M. Stensby aleksander (dot) stensby (at) gmail (dot) com

Upload: aleksander-stensby

Post on 29-Nov-2014

417 views

Category:

Technology


2 download

DESCRIPTION

Lightningtalk about neo4j and graph databases, given at the javaBin Vestfold meetup on the 19th of March. (In Norwegian)

TRANSCRIPT

Page 1: Lynintroduksjon til grafdatabaser og Neo4j

En lynintroduksjon til grafdatabaser og Neo4j

Aleksander M. Stensby

aleksander (dot) stensby (at) gmail (dot) com

Page 2: Lynintroduksjon til grafdatabaser og Neo4j

Agenda

• Intro til grafdatabaser og modellering

• Intro til neo4j og Cypher

• (Intro til SpringData Neo4j)

Page 3: Lynintroduksjon til grafdatabaser og Neo4j

... på 15 minutter!

Page 4: Lynintroduksjon til grafdatabaser og Neo4j

Relasjondatabaser suger...

Page 5: Lynintroduksjon til grafdatabaser og Neo4j

...på relasjoner

Page 6: Lynintroduksjon til grafdatabaser og Neo4j

Relasjondatabaser er fantastisk på aggregering av data, mapping av

skjemaer og tabell data!

Page 7: Lynintroduksjon til grafdatabaser og Neo4j

MEN

Page 8: Lynintroduksjon til grafdatabaser og Neo4j

vi har en tendens til å tvinge _alle_

problemstillinger inn i relasjondatabasene våre!

Page 9: Lynintroduksjon til grafdatabaser og Neo4j

Join-hell..

Rekursjon...

Null-sjekking...

Page 10: Lynintroduksjon til grafdatabaser og Neo4j

NoSQL Størrelse

Kompleksitet

Grafer

Dokument

BigTable

KV

Page 11: Lynintroduksjon til grafdatabaser og Neo4j

NoSQL Størrelse

Kompleksitet

Grafer

Dokument

BigTable

KV

90% Milliarder av noder og relasjoner

Page 12: Lynintroduksjon til grafdatabaser og Neo4j

Venner av venner...

Page 13: Lynintroduksjon til grafdatabaser og Neo4j

Person ID Navn

Venner PersonID VennID

«Aleks» sine venners venner?

SELECT p1.Person AS PERSON, p2.Person AS VENN_AV_VENN FROM Venner v1 JOIN Person p1 ON v1.PersonID = p1.ID JOIN Venner v2 ON v2.VennID = v1.VennID JOIN Person p2 ON v2.VennID = p2. ID WHERE p1.Navn = 'Aleks‘ AND v2.VennID <> p1.ID

Page 14: Lynintroduksjon til grafdatabaser og Neo4j

Kilde: Neo4j in Action

1,000,000 personer

Dybde RDBMS Neo4j Antall rader

2 0.016 0.01 ~ 2500

3 30.267 0.168 ~ 110,000

4 1543.505 1.359 ~ 600,000

5 DNF 2.132 ~ 800,000

Page 15: Lynintroduksjon til grafdatabaser og Neo4j
Page 16: Lynintroduksjon til grafdatabaser og Neo4j

En grafdatabase...

• benytter grafstrukturer med – Noder

– Relasjoner

– Attributter

• til å lagre informasjon!

• Ypperlig til relasjoner – men ikke best på aggregering av data

Page 17: Lynintroduksjon til grafdatabaser og Neo4j

En graf lagrer data i noder

ALEKS RAYMOND

Page 18: Lynintroduksjon til grafdatabaser og Neo4j

Relasjoner knytter noder sammen

FRIENDS_WITH

ALEKS RAYMOND

Page 19: Lynintroduksjon til grafdatabaser og Neo4j

Noder har attributter

ALEKS RAYMOND

Age: 29 First Name: Aleksander Last Name: Stensby

Age: 31 First Name: Raymond Last Name: Koteng

FRIENDS_WITH

Page 20: Lynintroduksjon til grafdatabaser og Neo4j

Relasjoner kan også ha attributter

ALEKS RAYMOND

Age: 29 First Name: Aleksander Last Name: Stensby

Age: 31 First Name: Raymond Last Name: Koteng

FRIENDS_WITH Since: 01.01.2004

Page 21: Lynintroduksjon til grafdatabaser og Neo4j

Relasjoner kan gå flere veier

ALEKS RAYMOND

Age: 29 First Name: Aleksander Last Name: Stensby

Age: 31 First Name: Raymond Last Name: Koteng

FRIENDS_WITH Since: 01.01.2004

FRIENDS_WITH Since: 01.01.2004

Page 22: Lynintroduksjon til grafdatabaser og Neo4j

ALEKS RAYMOND

Age: 29 First Name: Aleksander Last Name: Stensby

Age: 31 First Name: Raymond Last Name: Koteng

FRIENDS_WITH Since: 01.01.2004

Page 23: Lynintroduksjon til grafdatabaser og Neo4j

ALEKS RAYMOND

Age: 29 First Name: Aleksander Last Name: Stensby Type: Person

Age: 31 First Name: Raymond Last Name: Koteng Type: Person

FRIENDS_WITH Since: 01.01.2004

forskjellige typer av noder

Page 24: Lynintroduksjon til grafdatabaser og Neo4j

Person Person

Sport

Programmeringspråk

Drikke

Person

Page 25: Lynintroduksjon til grafdatabaser og Neo4j

Neo4j – [ER_EN] -> Property Graph

Page 26: Lynintroduksjon til grafdatabaser og Neo4j

Cypher

"Make the simple things simple, and the complex things possible"

Page 27: Lynintroduksjon til grafdatabaser og Neo4j

Intro til Cypher

• START

• MATCH

• WHERE

• RETURN

• CREATE

• DELETE

• SET

• FOREACH

• WITH

Page 28: Lynintroduksjon til grafdatabaser og Neo4j

Beskriv hva du ønsker å hente ut med PATTERNS

(a)-[r]->(b)

Page 29: Lynintroduksjon til grafdatabaser og Neo4j

(Aleks) – [FRIENDS_WITH] -> (Raymond)

Page 30: Lynintroduksjon til grafdatabaser og Neo4j

MATCH

MATCH (movie:Movie)

RETURN movie

Page 31: Lynintroduksjon til grafdatabaser og Neo4j

WHERE

MATCH movie

WHERE move.title = ‘Blade Runner'

RETURN movie

Page 32: Lynintroduksjon til grafdatabaser og Neo4j

Venner...

MATCH (aleks)-[:KNOWS]->(friend)

WHERE aleks.firstName= 'Aleks'

RETURN friend.firstName

Page 33: Lynintroduksjon til grafdatabaser og Neo4j

Venners venner...

MATCH (aleks)-[:KNOWS]->(friend)-[:KNOWS]->(friend_of_friend)

WHERE aleks.firstName= 'Aleks'

RETURN friend_of_friend.firstName

Page 34: Lynintroduksjon til grafdatabaser og Neo4j

Venners venner...

MATCH (aleks)-[:KNOWS*2]->(friend_of_friend)

WHERE aleks.firstName= 'Aleks'

RETURN friend_of_friend.firstName

Page 35: Lynintroduksjon til grafdatabaser og Neo4j

Venners venner...

MATCH (aleks)-[:KNOWS*2..2]->(friend_of_friend)

WHERE aleks.firstName= 'Aleks'

AND NOT (aleks)-[:KNOWS]->(friend_of_friend)

RETURN friend_of_friend.firstName

Page 36: Lynintroduksjon til grafdatabaser og Neo4j

på 1-2-3

DEMO

Page 37: Lynintroduksjon til grafdatabaser og Neo4j

Og mye mye mer...

• Traversals navigerer grafen • Traversals identifiserer paths • Paths ordner noder • Cypher parametere • Indexes • Neo4j embedded, Neo4j REST • Neo4j 2.x – Labels og automatiske indekser • Gremlin (procedural) – Cypher (declarative) • Enterprise (multi-instance cluster, online backup) • Neo4j Spatial

Page 38: Lynintroduksjon til grafdatabaser og Neo4j

Lessons Learned

• Vær forsiktig med versjoner og oppgraderinger… – Neo 1.9.x -> Neo 2.x kan by på mange problemer

– Spring Data Neo4j != Neo4j

• Noder er “first-class” citizens I grafen – Hyperedges støttes ikke -> kan bruke “event nodes”

• Dyrt å aggregere - caching av stats på noder!

• Unike og ekspressive relasjonstyper

Page 39: Lynintroduksjon til grafdatabaser og Neo4j