Este documento apresenta os resultados de uma comparação de desempenho entre bancos de dados de grafos com armazenamento nativo (Neo4j) e com armazenamento chave-valor (TitanDB e HypergraphDB). Os experimentos avaliaram a carga inicial, inserção de propriedades, menor caminho, busca em largura e cálculo de centralidade em grafos com 100k, 2M e 10M de arestas. O Neo4j geralmente obteve melhores resultados do que os outros bancos. O uso de cache também melhorou o desempen
Clusterização de padrões de candlesticks utilizando Mapas de Kohonen
Comparação desempenho SGBDs grafos nativo x chave/valor
1. Trabalho de Top.
Especiais em bancos
de dados (noSql)
André Carvalho – andrestc@cos.ufrj.br
2. “UMA COMPARAÇÃO DO DESEMPENHO DE SGBDS DE GRAFOS
COM ARMAZENAMENTO NATIVO E SGBDS DE GRAFOS COM
ARMAZENAMENTO BASEADO EM CHAVE/VALOR”
3. Agenda
´ Introdução
´ Objetivo
´ Conjunto de Dados
´ Experimentos
´ Resultados
´ Conclusão
´ Trabalhos Futuros
4. Objetivo
´ Comparar o desempenho de bancos de grafos
´ Com armazenamento nativo
´ Neo4j
´ Com armazenamento chave/valor (BerkeleyDB)
´ TitanDB
´ HypergraphDB
5. Conjunto de Dados
´ Hyperlink Graphs
http://webdatacommons.org/hyperlinkgraph/
´ 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
6. 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
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
8. Resultados - Carga Inicial do
Grafo
4000
3500
3000
2500
2000
1500
1000
500
0
Criação do Grafo 100k Arestas
10000 20000 30000 40000 50000 60000 70000 80000 90000 100000
Tempo (ms)
Quantidade de Arestas
Neo4j
Titan
Hypergraph
10. Resultados - Carga Inicial do
Grafo
35000
30000
25000
20000
15000
10000
5000
0
Tempo (ms)
Criação do Grafo 2 milhões de arestas
Quantidade de Arestas
Neo4j
Titan
Hypergraph
18. Resultados – Calculo de
Centralidade
Neo4j Titan Hypergraph
60000
50000
40000
30000
20000
10000
0
100k 2039 5897 18408
2kk 13379 55537
10kk 48708
Tempo (ms)
Calculo de Centralidade
* Hypergraph com 2kk: 6.912.718 ms
19. 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
20. Resultados – Menor
Caminho entre dois nós
Menor Caminho entre dois nós
Neo4j Neo4j HPC Titan Data Cache Titan
2.5
2
1.5
1
0.5
0
100k 0.07936 0.06308 0.09424 0.09338
2kk 1.62647 0.49148 2.16129 0.24174
23. 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.
24. 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.
25. 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.
26. Trabalho de Top.
Especiais em bancos
de dados (noSql)
André Carvalho – andrestc@cos.ufrj.br