grafová databáze neo4j

Post on 29-Jun-2015

722 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Josef Holý@holyjJosef.Holy@Proactify.com

Grafová databáze neo4j

NOSQL =

Not Only SQL

3

NOSQL Databáze

Komplexita

Objem

4

NOSQL Databáze

Komplexita

Key-value(Cassandra)

Objem

5

NOSQL Databáze

Komplexita

Column-family(HBase)

Objem

Key-value(Cassandra)

6

NOSQL Databáze

Komplexita

Document(MongoDB)

Objem

Key-value(Cassandra)

Column-family(HBase)

7

NOSQL Databáze

Objem

Komplexita

RDBMS

Key-value(Cassandra)

Column-family(HBase)

Document(MongoDB)

8

NOSQL Databáze

Objem

Komplexita

Graph

Key-value(Cassandra)

Column-family(HBase)

Document(MongoDB)

9

NOSQL Databáze

Objem

Komplexita

Graph

Key-value(Cassandra)

Column-family(HBase)

Document(MongoDB)

90% Use Cases

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?

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?

12

(Social) Graph v RDBMS

1 Adam

2 Bedřich

3 Čenda

4 David

5 Eduard

...

id name

PERSON

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

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

Problém:

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

... přátel

Čendových přátel~

V RDBMS = 'multiple JOINs' => time cost

16

Graph DB?

=Explicitně Definované

Uzly

17

Graph DB?

=Explicitně Definované

Uzly A Hrany

18

Graph DB?

=Explicitně Definované

Uzly A Hrany

19

Graph DB?

=Explicitně Definované

Uzly A Hrany

20

Graph DB?

=Explicitně Definované

Uzly A Hrany

Name:Čenda Name:David

Type: KNOWS

21

Graph DB?

=Explicitně Definované

Uzly A Hrany A Property

Name:Čenda Name:DavidSince:1992

Type: KNOWS

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

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í.

24

Grafové databáze

● AllegroGraph – 'Quad Store'● OrientDB – 'Document-graph'● FlockDB – 'Adjacency lists store'● …● 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)

26

Neo4j

● 'Property Graph Database'● Edice a Licence:

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

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

27

Write: ACID

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

28

Write: ACID

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

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

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();

}

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();

}

31

Read: (Lucene) Index

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

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

34

Read: Traversal

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

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

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

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

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

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

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í.

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

41

For anything with multiple relationships, multiple connections,

Neo4j absolutely ROCKS!

~ Werner VogelsAmazon CTO

Josef Holý@holyjJosef.Holy@Proactify.com

top related