9. NOSQL Databáze
Komplexita
Graph
Document
(MongoDB)
Column-family
(HBase)
Key-value
(Cassandra)
90% Objem
Use Cases
9
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?
10
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?
11
12. (Social) Graph v RDBMS
id name
1 Adam
2 Bedřich
3 Čenda
4 David
5 Eduard
...
PERSON
12
13. (Social) Graph v RDBMS
id name start type start
1 Adam 1 KNOWS 2
2 Bedřich 2 KNOWS 5
3 Čenda 3 KNOWS 4
4 David ...
5 Eduard RELATIONSHIP
...
PERSON
13
14. Social Graph v RDBMS
id name start type start id name
1 Adam 1 KNOWS 2 1 Adam
2 Bedřich 2 KNOWS 5 2 Bedřich
3 Čenda 3 KNOWS 4 3 Čenda
4 David ... 4 David
5 Eduard RELATIONSHIP 5 Eduard
... ...
PERSON PERSON
14
15. Problém:
Najdi všechny
přátele
přátel
...
přátel
Čendových přátel
~
V RDBMS = 'multiple JOINs' => time cost
21. Graph DB?
=
Explicitně Definované
Uzly A Hrany A Property
Type: KNOWS
Name:Čenda Since:1992 Name:David
21
22. RDBMS vs. GraphDB
id name start label start id name
1 Adam 1 KNOWS 2 1 Adam
2 Bedřich 2 KNOWS 5 2 Bedřich
3 Čenda 3 KNOWS 4 3 Čenda
4 David 3 KNOWS 5 4 David
5 Eduard RELATIONSHIP 5 Eduard
... 1 2 3 ...
PERSON PERSON
5 4
22
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í.
23
33. Read: Pattern-matching
CYPHER:Najdi všechny Čendovy přátele do hloubky 5
START cenda=node:node_auto_index(name = 'Čenda')
MATCH (cenda)-[:KNOWS*5]->(friend)
RETURN friend
33
34. Read: Traversal
Gremlin:Najdi všechny Čendovy přátele
result = []
cenda = ...najdi v indexu...
cenda.outE('KNOWS').inV.aggregate(result)
return result
34
35. Read: Traversal + closure
Gremlin:Najdi všechny Čendovy přátele do hloubky 5
result = []
cenda = ...najdi v indexu...
cenda.outE('KNOWS').inV.loop(2){it.loops <
5}.aggergate(result)
return result
35
36. Traversals vs. JOINs
3-step traversal: Gremlin
g.V(?).outE.inV.outE.inV.outE.inV
1 2 3
3-step traversal v MySQL – table JOINs
1MNodes
SELECT c.inV /
FROM graph as a, graph as b, graph as c 4MEdges
WHERE
a.inV=b.outV AND b.inV=c.outV AND a.outV=?
1 2 3
36