13. 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
16. En grafdatabase...
• benytter grafstrukturer med
– Noder
– Relasjoner
– Attributter
• til å lagre informasjon!
• Ypperlig til relasjoner – men ikke best på
aggregering av data
19. Noder har attributter
ALEKS RAYMOND
Age: 29
First Name: Aleksander
Last Name: Stensby
Age: 31
First Name: Raymond
Last Name: Koteng
FRIENDS_WITH
20. 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
21. 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
22. ALEKS RAYMOND
Age: 29
First Name: Aleksander
Last Name: Stensby
Age: 31
First Name: Raymond
Last Name: Koteng
FRIENDS_WITH
Since: 01.01.2004
23. 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
38. 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