grafová databáze neo4j

42
Josef Holý @holyj [email protected] Grafová databáze neo4j

Upload: josef-holy

Post on 29-Jun-2015

722 views

Category:

Technology


1 download

DESCRIPTION

Prezentace o grafové databázi neo4J z CZJUGU z května 2012.

TRANSCRIPT

Page 1: Grafová databáze neo4j

Josef Holý@[email protected]

Grafová databáze neo4j

Page 2: Grafová databáze neo4j

NOSQL =

Not Only SQL

Page 3: Grafová databáze neo4j

3

NOSQL Databáze

Komplexita

Objem

Page 4: Grafová databáze neo4j

4

NOSQL Databáze

Komplexita

Key-value(Cassandra)

Objem

Page 5: Grafová databáze neo4j

5

NOSQL Databáze

Komplexita

Column-family(HBase)

Objem

Key-value(Cassandra)

Page 6: Grafová databáze neo4j

6

NOSQL Databáze

Komplexita

Document(MongoDB)

Objem

Key-value(Cassandra)

Column-family(HBase)

Page 7: Grafová databáze neo4j

7

NOSQL Databáze

Objem

Komplexita

RDBMS

Key-value(Cassandra)

Column-family(HBase)

Document(MongoDB)

Page 8: Grafová databáze neo4j

8

NOSQL Databáze

Objem

Komplexita

Graph

Key-value(Cassandra)

Column-family(HBase)

Document(MongoDB)

Page 9: Grafová databáze neo4j

9

NOSQL Databáze

Objem

Komplexita

Graph

Key-value(Cassandra)

Column-family(HBase)

Document(MongoDB)

90% Use Cases

Page 10: Grafová databáze neo4j

10

NOSQL Databáze

Key-value, Column, Document, Tables~ agregační problémy ~

Jaký je průměrný věk lidí na této přednášce?

Page 11: Grafová databáze neo4j

11

NOSQL Databáze

Key-value, Column, Document, Tables~ agregační problémy ~

Jaký je průměrný věk lidí na této přednášce?

Graph DB~ strukturální, 'vztahové', problémy ~

S kým z lidí na této přednášce bych měl jít na pivo?

Page 12: Grafová databáze neo4j

12

(Social) Graph v RDBMS

1 Adam

2 Bedřich

3 Čenda

4 David

5 Eduard

...

id name

PERSON

Page 13: Grafová databáze neo4j

13

(Social) Graph v RDBMS

1 Adam

2 Bedřich

3 Čenda

4 David

5 Eduard

...

id name

1 KNOWS 2

start starttype

2 KNOWS 5

3 KNOWS 4

...

PERSON

RELATIONSHIP

Page 14: Grafová databáze neo4j

14

Social Graph v RDBMS

1 Adam

2 Bedřich

3 Čenda

4 David

5 Eduard

...

id name

1 KNOWS 2

start starttype

1 Adam

2 Bedřich

3 Čenda

4 David

5 Eduard

...

id name

2 KNOWS 5

3 KNOWS 4

...

PERSON PERSON

RELATIONSHIP

Page 15: Grafová databáze neo4j

Problém:

Najdi všechny přátele přátel

... přátel

Čendových přátel~

V RDBMS = 'multiple JOINs' => time cost

Page 16: Grafová databáze neo4j

16

Graph DB?

=Explicitně Definované

Uzly

Page 17: Grafová databáze neo4j

17

Graph DB?

=Explicitně Definované

Uzly A Hrany

Page 18: Grafová databáze neo4j

18

Graph DB?

=Explicitně Definované

Uzly A Hrany

Page 19: Grafová databáze neo4j

19

Graph DB?

=Explicitně Definované

Uzly A Hrany

Page 20: Grafová databáze neo4j

20

Graph DB?

=Explicitně Definované

Uzly A Hrany

Name:Čenda Name:David

Type: KNOWS

Page 21: Grafová databáze neo4j

21

Graph DB?

=Explicitně Definované

Uzly A Hrany A Property

Name:Čenda Name:DavidSince:1992

Type: KNOWS

Page 22: Grafová databáze neo4j

22

RDBMS vs. GraphDB

1 Adam

2 Bedřich

3 Čenda

4 David

5 Eduard

...

id name

1 KNOWS 2

start startlabel

1 Adam

2 Bedřich

3 Čenda

4 David

5 Eduard

...

id name

2 KNOWS 5

3 KNOWS 4

1 2 3

5 4

3 KNOWS 5

RELATIONSHIP

PERSON PERSON

Page 23: Grafová databáze neo4j

23

Výhoda Graph DB

V Graph DB platíme 'cenu za vztah' při vytváření.

V Ostatních Databázích se cena platí při vyhledávání.

Page 24: Grafová databáze neo4j

24

Grafové databáze

● AllegroGraph – 'Quad Store'● OrientDB – 'Document-graph'● FlockDB – 'Adjacency lists store'● …● Neo4j

Page 25: Grafová databáze neo4j

25

Neo4j

● 'Property Graph Database'● Edice a Licence:

● Community ~ (A)GPL● Advanced ~ Commercial● Enterprise ~ Commercial

● Nasazení:● Embedded Mode (Java, JAR)● Standalone Mode (REST API)

Page 26: Grafová databáze neo4j

26

Neo4j

● 'Property Graph Database'● Edice a Licence:

● Community ~ (A)GPL● Advanced ~ Commercial● Enterprise ~ Commercial

● Nasazení:● Embedded Mode (Java, JAR)● Standalone Mode (REST API)

Page 27: Grafová databáze neo4j

27

Write: ACID

GraphDabaseService gdb = new EmbeddedGraphDatabase(„/data/graph/test“, PARAMS);

Page 28: Grafová databáze neo4j

28

Write: ACID

GraphDabaseService gdb = new EmbeddedGraphDatabase(„/data/graph/test“, PARAMS);

Transaction tx = gdb.beginTx(); //FULL ACID TX support

Page 29: Grafová databáze neo4j

29

Write: ACID

GraphDabaseService gdb = new EmbeddedGraphDatabase(„/data/graph/test“, PARAMS);

Transaction tx = gdb.beginTx();

try{

tx.success();

}catch(SomeException ex){

tx.failure();

}finally{

tx.finish();

}

Page 30: Grafová databáze neo4j

30

Write: ACID

GraphDabaseService gdb = new EmbeddedGraphDatabase(„/data/graph/test“, PARAMS);

Transaction tx = gdb.beginTx();

try{

Node c = gdb.createNode();

c.setProperty(„name“, „� enda“);

Node e = gdb.createNode();

e.setProperty(„name“, „Eduard“);

Relationship rel = c.setRelationshipTo(e, KNOWS);

tx.success();

}catch(SomeException ex){

tx.failure();

}finally{

tx.finish();

}

Page 31: Grafová databáze neo4j

31

Read: (Lucene) Index

Page 32: Grafová databáze neo4j

32

Read: Pattern-matching

START cenda=node:node_auto_index(name = 'Čenda')MATCH (cenda)-[:KNOWS]->(friend)RETURN friend

CYPHER:Najdi všechny Čendovy přátele

Page 33: Grafová databáze neo4j

33

Read: Pattern-matching

START cenda=node:node_auto_index(name = 'Čenda')MATCH (cenda)-[:KNOWS*5]->(friend)RETURN friend

CYPHER:Najdi všechny Čendovy přátele do hloubky 5

Page 34: Grafová databáze neo4j

34

Read: Traversal

result = []cenda = ...najdi v indexu...cenda.outE('KNOWS').inV.aggregate(result)return result

Gremlin:Najdi všechny Čendovy přátele

Page 35: Grafová databáze neo4j

35

Read: Traversal + closure

result = []cenda = ...najdi v indexu...cenda.outE('KNOWS').inV.loop(2){it.loops < 5}.aggergate(result)return result

Gremlin:Najdi všechny Čendovy přátele do hloubky 5

Page 36: Grafová databáze neo4j

36

Traversals vs. JOINs

1MNodes/

4MEdgesSELECT c.inV FROM graph as a, graph as b, graph as cWHEREa.inV=b.outV AND b.inV=c.outV AND a.outV=?

3-step traversal v MySQL – table JOINs

1 2 3

g.V(?).outE.inV.outE.inV.outE.inV

3-step traversal: Gremlin

1 2 3

Page 37: Grafová databáze neo4j

37

Zkušenosti: „Interest Graph“

LIKES

LIKES

LIKES

LIKES

LIKES

LIKESweight: 0.5

Weight: 0.3

weight: 0.83

weight: 0.745

weight: 0.2

weight: 0.6

Page 38: Grafová databáze neo4j

38

Zkušenosti: „Interest Graph“

● po 10 měsících pilotního provozu● Embedded mode (Java, Linux, Amazon EC2)● 100M+ nodes● 200M+relationships● avg <50ms recommendations response time,

100 reads per second

Page 39: Grafová databáze neo4j

39

Pozor

V Graph DB platíme 'cenu za vztah' při vytváření.

V Ostatních Databázích se cena platí při vyhledávání.

Page 40: Grafová databáze neo4j

40

Pozor● Super-nodes = (10k+ relationships)

● Index-free traversal → time ● Write performance – node locked při vytvoření

relationshipu● Lucene Index

● Write performance – index locking● 'Vendor Lock-in' – messy JTA/JTS

implementace● Horizontální škálovatelnost pro Write

● Sharding support se připravuje

Page 41: Grafová databáze neo4j

41

For anything with multiple relationships, multiple connections,

Neo4j absolutely ROCKS!

~ Werner VogelsAmazon CTO

Page 42: Grafová databáze neo4j

Josef Holý@[email protected]