bekk - nosql-kurs kveld 2

41
NOSQL-KURS KVELD 2 Grafdatabaser NoSQL-kurs for studenter ved UiO Jørgen Braseth – [email protected] 18. Mars 2015

Upload: jorgen-braseth

Post on 17-Jul-2015

47 views

Category:

Software


0 download

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

GRAFER OG GRAFDATABASER

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

Den mest naturlige måten å tenke på!

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

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

NEO4J - ADMINGRENSESNITTET

CYPHER

Deklarativt spørrespråk

ASCII-art!

Mønstergjenkjenning

HANDS ON – NODER OG RELASJONER

«Lær å tegne med Cypher»

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

NODER I CYPHER

()

navn: ”Ole”

({navn: ”Ole”})

:Person

(:Person)

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

RELASJONER I CYPHER

() -- ()

() --> ()

() –[:IS_A]-> ()

IS_A

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

GO DO STUFF!

http://bit.ly/oppgaver2

HANDS ON - OPPRETTE DATA

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

GO DO STUFF!

http://bit.ly/oppgaver2

DEL 4 – AVANSERTE SPØRRINGER

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

GO DO STUFF!

http://bit.ly/oppgaver2

LITT MER TEORI

Lynrask traversering av relasjonerRelasjoner er en del av språket

Egner seg for:Anbefalingsmotorer

PathfindingMønstergjenkjenning

Prediktiv analyse

HVORFOR NEO4J?

HVA MED RELASJONSDATABASER?

Basert på relasjonsalgebraJoins er dyrt

Ingen egentlig støtte for relasjoner

HVA MED MONGODB?

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?

?

TAKK FOR I KVELD!

Jørgen [email protected]