Uma comparação do desempenho de SGBDS de grafos com armazenamento nativo e SGBDS de grafos com...
-
Upload
andre-santos -
Category
Technology
-
view
68 -
download
4
Transcript of Uma comparação do desempenho de SGBDS de grafos com armazenamento nativo e SGBDS de grafos com...
Trabalho de Top. Especiais em bancos de dados (noSql)
André Carvalho – [email protected]
“UMA COMPARAÇÃO DO DESEMPENHO DE SGBDS DE GRAFOS COM ARMAZENAMENTO NATIVO E SGBDS DE GRAFOS COM
ARMAZENAMENTO BASEADO EM CHAVE/VALOR”
Agenda
´ Introdução
´ Objetivo
´ Conjunto de Dados
´ Experimentos
´ Resultados
´ Conclusão
´ Trabalhos Futuros
Objetivo
´ Comparar o desempenho de bancos de grafos
´ Com armazenamento nativo
´ Neo4j
´ Com armazenamento chave/valor (BerkeleyDB)
´ TitanDB
´ HypergraphDB
Conjunto de Dados
´ Hyperlink Graphs
´ Uma amostra da web extraída a partir de um Crawler
´ PLD
´ 43 milhões de vértices (Websites)
´ 623 milhões de arestas (Links)
´ Arquivos
´ Index File – 297 MB (1 GB)
´ ID - URL
´ Arc File – 2.8 GB (10 GB)
´ ID - ID
http://webdatacommons.org/hyperlinkgraph/
Experimentos
´ Três conjuntos de experimentos ´ 100 mil arestas (~ 70 mil vértices)
´ 2 milhões de arestas (~ 1 milhão de vértices)
´ 10 milhões de arestas (~ 3 milhões de vértices)
´ Tarefas realizadas: ´ Carga inicial do Grafo
´ Inserção de informações (propriedades) nos nós
´ Menor caminho entre dois nós
´ Busca em largura a partir de um nó
´ Calculo de centralidade de todos os nós
´ Executados em:
´ Intel i7, 8gb de RAM, Windows 7
Experimentos
´ Carga Inicial ´ Neo4j e Titan à BatchGraph (Tinkerpop)
´ HypergraphDB à Armazenando átomos em memória para verificar se já foram inseridos
´ Inserção de informações ´ Utilizando índices
´ Menor caminho entre nós e busca em largura ´ Titan à Gremlin (Tinkerpop)
´ Neo4j e Hypergraph à API’s próprias
´ Centralidade ´ API’s próprias
´ Carregando todos os vértices e contando suas arestas incidentes
Resultados - Carga Inicial do Grafo
0
500
1000
1500
2000
2500
3000
3500
4000
10000 20000 30000 40000 50000 60000 70000 80000 90000 100000
Tem
po
(m
s)
Quantidade de Arestas
Criação do Grafo 100k Arestas
Neo4j
Titan
Hypergraph
Resultados - Carga Inicial do Grafo
12655
12079
12361
11700
11800
11900
12000
12100
12200
12300
12400
12500
12600
12700
Neo4j Titan Hypergraph
Tem
po
(m
s)
100k Arestas
Resultados - Carga Inicial do Grafo
0
5000
10000
15000
20000
25000
30000
35000
Tem
po
(m
s)
Quantidade de Arestas
Criação do Grafo 2 milhões de arestas
Neo4j
Titan
Hypergraph
Resultados - Carga Inicial do Grafo
205789
255065
317381
0
50000
100000
150000
200000
250000
300000
350000
Neo4j Titan Hypergraph
Tem
po
(m
s)
2kk Arestas
Resultados – Carga Inicial do Grafo
0
500000
1000000
1500000
2000000
2500000
3000000
1000
00
5000
00
9000
00
1300
000
1700
000
2100
000
2500
000
2900
000
3300
000
3700
000
4100
000
4500
000
4900
000
5300
000
5700
000
6100
000
6500
000
6900
000
7300
000
7700
000
8100
000
8500
000
8900
000
9300
000
9700
000
Tem
po
(m
s)
Quantidade de arestas
Criação do Grafo 10kk Arestas
Neo4j
Titan
Hypergraph
Resultados – Carga Inicial do Grafo
0
10000000
20000000
30000000
40000000
50000000
60000000
Neo4j Titan Hypergraph
Tem
po
(m
s)
10kk Arestas
Resultados – Carga Inicial do Grafo
Neo4j Titan Hypergraph
100k 0.063 0.056 0.154
2kk 0.934 0.64 2.38
10kk 4.35 4.47 15.60
0.06
3
0.05
6
0.15
4
0.93
4
0.64
2.38
4.35
4.47
15.6
0
ESPA
ÇO
EM
DIS
CO
(G
B)
ESPAÇO OCUPADO EM DISCO
Resultados – Inserção de Propriedades em nós
Neo4j Titan Hypergraph
100k 1.198886076 0.994379747 0.603544304
2kk 1.1379 1.07584 14.87694
10kk 1.43385 18.7803 0
0
2
4
6
8
10
12
14
16
18
20
Tem
po
(m
s)
Tempo médio na inserção propriedades
100k
2kk
10kk
Resultados – Menor Caminho entre dois nós
Neo4j Titan Hypergraph
100k 0.07936 0.09338 0.43828
2kk 1.62647 0.24174
10kk 2.53481 17.08998
0
2
4
6
8
10
12
14
16
18
Tem
po
mé
dio
(m
s)
Calculo do Menor Caminho
Resultados – Busca Em Largura
Neo4j Titan Hypergraph
100k 0.079873418 0.096582278 0.523658228
2kk 0.123159335 0.898228739
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Tem
po
(m
s) m
éd
io Busca em Largura (profundidade max. 3)
Resultados – Calculo de Centralidade
Neo4j Titan Hypergraph
100k 2039 5897 18408
2kk 13379 55537
10kk 48708
0
10000
20000
30000
40000
50000
60000
Tem
po
(m
s)
Calculo de Centralidade
* Hypergraph com 2kk: 6.912.718 ms
Análise de Cache
´ Comparação entre implementações de cache de objeto
´ Neo4j
´ High Performance Cache ativado
´ 1GB para vértices
´ 500MB para arestas
´ Titan
´ Cache de objeto ativado
´ 1.5GB para vértices e arestas
´ Repetindo a execução dos algoritmos de grafos
Resultados – Menor Caminho entre dois nós
Neo4j Neo4j HPC Titan Data Cache Titan
100k 0.07936 0.06308 0.09424 0.09338
2kk 1.62647 0.49148 2.16129 0.24174
0
0.5
1
1.5
2
2.5
Menor Caminho entre dois nós
Resultados – Busca Em Largura
Neo4j Neo4j HPC Titan Data Cache Titan
100k 0.079873418 0.065101266 0.068518987 0.096582278
2kk 0.123159335 0.091173021 0.386042033 0.898228739
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Busca em Largura
Resultados – Calculo de Centralidade
Neo4j Neo4j HPC Titan Data Cache Titan
100k 2039 1308 5421 5897
2kk 13379 13692 101136 55537
0
20000
40000
60000
80000
100000
120000
Calculo de Centralidade
Conclusões
´ De modo geral, os bancos com armazenamento baseado em chave/valor se mostraram bastante inferiores ao Neo4j;
´ Principalmente em grafos maiores.
´ Apesar disso, a diferença nos resultados entre o TitanDB e o HypergraphDB evidencia as diferenças de implementação;
´ Por ser muito genérico, o HypergraphDB acaba sofrendo problemas de performance.
´ Comunidade pouco ativa e “não profissional”.
´ Problemas de performance conhecidos.
Conclusões
´ Para grafos menores (100k arestas) o cache de objeto fez pouca diferença
´ No caso do Neo4j se mostrou bastante eficiente em grafos maiores
´ As configurações, de modo geral, são pouco documentadas. É necessário um esforço, por meio de experimentação, para obter melhoras na performance.
´ A Tinkerpop Stack apesar de interessante, ainda carece de algumas funcionalidades, principalmente de algoritmos.
Trabalhos Futuros
´ Analisar as configurações do BerkeleyDB a fim de buscar melhorar a performance do Hypergraph e do Titan;
´ Comparar os resultados com outros tipos de armazenamento, por exemplo, o relacional;
´ Contribuir para algum dos projetos do Tinkerpop Stack.
Trabalho de Top. Especiais em bancos de dados (noSql)
André Carvalho – [email protected]