bekk - nosql-kurs kveld 2
TRANSCRIPT
NOSQL-KURS KVELD 2
Grafdatabaser
NoSQL-kurs for studenter ved UiOJørgen Braseth – [email protected]
18. Mars 2015
AGENDA
•INTRO
•DEL 1 – TEORI: GRAFER OG GRAFDATABASER
•DEL 2 - HANDS ON
•DEL 3 - MER TEORI
•OPPSUMMERING
HVA ER EN GRAF?
Noder og kanter
Property graph:
Noder og kanter har egenskaper
Kanter har retning
Name:Rex
Name:Alice
Owns
Name:Rover
Name:Tom
Name:Floyd
Knows
HatesMarried to
Like
People
Dogs
Alle grafdatabaser snakker «grafisk»
«Native» grafdatabaser lagrer dataene som en graf
HVA ER EN GRAFDATABASE
Databasen vi skal se på i kveld!
Markedsledende
«Native» grafdatabase
Eget spørrespråk: Cypher
OLTP: Laget for real time spørringer
Fungerer best på deler av datasettet
HVA ER NEO4J?
HANDS ON
•DATASETTET
•SETUP
•NEO4J-ADMIN, CYPHER
•DEL 1 – NODER OG RELASJONER
•DEL 3 – OPPRETTE DATA
•DEL 4 – AVANSERTE SPØRRINGER
KVELDENS DATASETT
Noder:
36.957 Totalt, fordelt på:
14.526 produkter, med:
13.875 typer (produktnavn)
4.381 produsenter
904 opprinnelsessteder
41 flaskestørrelser
30 produktkategorier
16 innpakningsvarianter
2.684 Handlekurver
500 brukere
Relasjoner:
115.042 totalt, fordelt på:
14.526 produkter av en type
14.526 produkter i kategorier
14.526 størrelser på innpakning for produkter
14.526 opprinnelsessteder for produkter
14.526 innpakningstyper for produkter
14.363 produsenter av produkter
13.466 produkter i handlekurv
11.899 vennskap mellom brukere
2684 brukere som har kjøpt handlekruver
KVELDENS DATASETT
ProductCategory
LiquorType
ContainerSize
Producer
UserShoppingCart
Origin
Packaging
WAS_PART_OF_CART WAS_PURCHASED_BY
IS_FRIEND_OF
SETUP
• Velg deg en server: http://bit.ly/neo4j-ip
• Gå inn i admingrensesnittet (åpne adressen i browser)
MATCH (n) RETURN n LIMIT 4
CYPHER - NOEN NØKKELORD
MATCH - Beskriver et mønster å søke etter
WHERE - Begrenser søket
RETURN - Returnerer ønskede verdier
CREATE - Oppretter ny informasjon
MERGE - Oppretter ny informasjon – om den ikke finnes fra før
MATCH
// Alle noderMATCH (n) RETURN n
// Fire vilkårlige noderMATCH (n) RETURN n LIMIT 4
// Alle noder med label ”User”MATCH (n:User) RETURN n
n
MATCH - PROPERTIES
// Alle user-noder med navn ”john doe”MATCH (p:user {name:”john doe”}) RETURN p
// EllerMATCH (p:user)WHERE p.name = ”john doe”RETURN p
pName:
”John Doe”
RETURN PROPERTY
// Navn på alle brukereMATCH (p:user) RETURN p.name
p.name
John Doe
Jane Doe
Ozzy Doe
MATCH PÅ RELASJONER
p2
p2p1
p1
MATCH (p1) –[r]- (p2) RETURN p1,r,p2
MATCH (p1) --> (p2) RETURN p1,p2
MATCH PÅ RELASJONER – STØRRE MØNSTRE
p2
p1MATCH (p1) --> (p2) <-- (p3),(p4)-->(p2)
RETURN p1,p2,p3,p4
p3
p4
CREATE
// Oppretter node
CREATE (n1)
// Oppretter node med property
CREATE (n1 {name:”ole”})
// Eller
CREATE (n1)
SET n1.name="ole"
n1Name:”Ole”
n1
CREATE
// Oppretter noder og relasjon
CREATE (n1) -[r:relates_to]-> (n2)
// Oppretter ny node med relasjon til ekisterende
MATCH (n1)
CREATE (n1) -[r:relates_to]-> (n2)
n2n1
n2
RELATES_TO
RELATES_TOn1
MERGE
// 1. gang: oppretter noder og relasjonMERGE (n1) -[:RELATES_TO]-> (n2)
// 2. gang: gjør ingen tingMERGE (n1) -[:RELATES_TO]-> (n2)
n2n1RELATES_TO
n2n1RELATES_TO
AGGREGERING
// Antall noderMATCH (n) RETURN count(n)
// Summen av prisMATCH (n) RETURN sum(n.pris)
// Høyeste prisMATCH (n) RETURN max(n.pris)
ANTALL HOPP I RELASJONER
qp// Ett til to hoppMATCH (p) –[*1..2]-> (q)RETURN p, q
q
// Vilkårlig antall hoppMATCH (p) –[*]-> (q)RETURN p, q
qp q
PATHS
// Alle direkte fra n til mMATCH p = (n)-->(m) RETURN p
// Én korteste vei mellom m og n, men max lengde 3.MATCH p = shortestPath( (n)-[*..3]->(m) )RETURN p
// Alle korteste veier mellom m og nMATCH p = allShortestPath( (n)-->(m) )RETURN p
m
mn
n
mn
Lynrask traversering av relasjonerRelasjoner er en del av språket
Egner seg for:Anbefalingsmotorer
PathfindingMønstergjenkjenning
Prediktiv analyse
HVORFOR NEO4J?
Ikke egnet for
Analyse av store deler av datasettet
Relasjonsløse data
Høyvolum skriving av data
Bruksmønstere knyttet til enkeltagregater
HVORFOR IKKE NEO4J?