SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Trabalho de Top. 
Especiais em bancos 
de dados (noSql) 
André Carvalho – andrestc@cos.ufrj.br
“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 
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
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 
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
Resultados - Carga Inicial do 
Grafo 
12655 
12079 
12361 
12700 
12600 
12500 
12400 
12300 
12200 
12100 
12000 
11900 
11800 
11700 
Neo4j Titan Hypergraph 
Tempo (ms) 
100k Arestas
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
Resultados - Carga Inicial do 
Grafo 
205789 
255065 
317381 
350000 
300000 
250000 
200000 
150000 
100000 
50000 
0 
Neo4j Titan Hypergraph 
Tempo (ms) 
2kk Arestas
Resultados – Carga Inicial 
do Grafo 
0 
500000 
1000000 
1500000 
2000000 
2500000 
3000000 
100000 
500000 
900000 
1300000 
1700000 
2100000 
2500000 
2900000 
3300000 
3700000 
4100000 
4500000 
4900000 
5300000 
5700000 
6100000 
6500000 
6900000 
7300000 
7700000 
8100000 
8500000 
8900000 
9300000 
9700000 
Tempo (ms) 
Quantidade de arestas 
Criação do Grafo 10kk Arestas 
Neo4j 
Titan 
Hypergraph
Resultados – Carga Inicial 
do Grafo 
60000000 
50000000 
40000000 
30000000 
20000000 
10000000 
0 
Neo4j Titan Hypergraph 
Tempo (ms) 
10kk Arestas
Resultados – Carga Inicial 
do Grafo 
0.056 
0.154 
0.934 
0.64 
2.38 
4.35 
4.47 
Neo4j Titan Hypergraph 
0.063 
100k 0.063 0.056 0.154 
2kk 0.934 0.64 2.38 
10kk 4.35 4.47 15.60 
15.60 
ESPAÇO EM DISCO (GB) 
ESPAÇO OCUPADO EM DISCO
Resultados – Inserção de 
Propriedades em nós 
Neo4j Titan Hypergraph 
20 
18 
16 
14 
12 
10 
8 
6 
4 
2 
0 
100k 1.198886076 0.994379747 0.603544304 
2kk 1.1379 1.07584 14.87694 
10kk 1.43385 18.7803 0 
Tempo (ms) 
Tempo médio na inserção propriedades 
100k 
2kk 
10kk
Resultados – Menor 
Caminho entre dois nós 
Neo4j Titan Hypergraph 
18 
16 
14 
12 
10 
8 
6 
4 
2 
0 
100k 0.07936 0.09338 0.43828 
2kk 1.62647 0.24174 
10kk 2.53481 17.08998 
Tempo médio (ms) 
Calculo do Menor Caminho
Resultados – Busca Em 
Largura 
Neo4j Titan Hypergraph 
1 
0.9 
0.8 
0.7 
0.6 
0.5 
0.4 
0.3 
0.2 
0.1 
0 
100k 0.079873418 0.096582278 0.523658228 
2kk 0.123159335 0.898228739 
Tempo (ms) médio 
Busca em Largura (profundidade max. 3)
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
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 
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
Resultados – Busca Em 
Largura 
Busca em Largura 
Neo4j Neo4j HPC Titan Data Cache Titan 
1 
0.9 
0.8 
0.7 
0.6 
0.5 
0.4 
0.3 
0.2 
0.1 
0 
100k 0.079873418 0.065101266 0.068518987 0.096582278 
2kk 0.123159335 0.091173021 0.386042033 0.898228739
Resultados – Calculo de 
Centralidade 
Calculo de Centralidade 
Neo4j Neo4j HPC Titan Data Cache Titan 
120000 
100000 
80000 
60000 
40000 
20000 
0 
100k 2039 1308 5421 5897 
2kk 13379 13692 101136 55537
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 – andrestc@cos.ufrj.br

Contenu connexe

Similaire à Comparação desempenho SGBDs grafos nativo x chave/valor

Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningFelipe Santos
 
Real time replication using Kafka Connect
Real time replication using Kafka ConnectReal time replication using Kafka Connect
Real time replication using Kafka Connectconfluent
 
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Rodrigo Campos
 
Estudo de caso Ricardo Eletro
Estudo de caso Ricardo EletroEstudo de caso Ricardo Eletro
Estudo de caso Ricardo EletroMySQL Brasil
 
Cloud Day III - Modelos de licenciamento para parceiros com Windows Azure
Cloud Day III - Modelos de licenciamento para parceiros com Windows AzureCloud Day III - Modelos de licenciamento para parceiros com Windows Azure
Cloud Day III - Modelos de licenciamento para parceiros com Windows AzureLuciano Condé
 
Otimização holistica de ambiente computacional
Otimização holistica de ambiente computacionalOtimização holistica de ambiente computacional
Otimização holistica de ambiente computacionalRodrigo Campos
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesJoao Galdino Mello de Souza
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dadostdc-globalcode
 
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaAWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaDaniel Baptista Dias
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time Umbler
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptMarcos Artigas
 
Pré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkPré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkFelipe
 
InfiiniVision - A nova geração de Instrumentos de Testes de Sinais Mistos
InfiiniVision - A nova geração de Instrumentos de Testes de Sinais MistosInfiiniVision - A nova geração de Instrumentos de Testes de Sinais Mistos
InfiiniVision - A nova geração de Instrumentos de Testes de Sinais MistosPareseletronica
 
Build smarter and scalable applications using Microsoft Azure Database Services
Build smarter and scalable applications using Microsoft Azure Database ServicesBuild smarter and scalable applications using Microsoft Azure Database Services
Build smarter and scalable applications using Microsoft Azure Database ServicesFabrício Catae
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBRodrigo Hjort
 
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesPlanejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesJoao Galdino Mello de Souza
 
Sugestoes de ofertas em oracle cloud 09 07-2020
Sugestoes de ofertas em oracle cloud 09 07-2020Sugestoes de ofertas em oracle cloud 09 07-2020
Sugestoes de ofertas em oracle cloud 09 07-2020Oracle
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchLuiz Henrique Zambom Santana
 
Disponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Disponibilização de Serviços em IPv6 na UCS - Um Caso PráticoDisponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Disponibilização de Serviços em IPv6 na UCS - Um Caso PráticoJeronimo Zucco
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLRaul Oliveira
 

Similaire à Comparação desempenho SGBDs grafos nativo x chave/valor (20)

Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
 
Real time replication using Kafka Connect
Real time replication using Kafka ConnectReal time replication using Kafka Connect
Real time replication using Kafka Connect
 
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
 
Estudo de caso Ricardo Eletro
Estudo de caso Ricardo EletroEstudo de caso Ricardo Eletro
Estudo de caso Ricardo Eletro
 
Cloud Day III - Modelos de licenciamento para parceiros com Windows Azure
Cloud Day III - Modelos de licenciamento para parceiros com Windows AzureCloud Day III - Modelos de licenciamento para parceiros com Windows Azure
Cloud Day III - Modelos de licenciamento para parceiros com Windows Azure
 
Otimização holistica de ambiente computacional
Otimização holistica de ambiente computacionalOtimização holistica de ambiente computacional
Otimização holistica de ambiente computacional
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno Domingues
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dados
 
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaAWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.ppt
 
Pré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkPré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache Spark
 
InfiiniVision - A nova geração de Instrumentos de Testes de Sinais Mistos
InfiiniVision - A nova geração de Instrumentos de Testes de Sinais MistosInfiiniVision - A nova geração de Instrumentos de Testes de Sinais Mistos
InfiiniVision - A nova geração de Instrumentos de Testes de Sinais Mistos
 
Build smarter and scalable applications using Microsoft Azure Database Services
Build smarter and scalable applications using Microsoft Azure Database ServicesBuild smarter and scalable applications using Microsoft Azure Database Services
Build smarter and scalable applications using Microsoft Azure Database Services
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesPlanejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
 
Sugestoes de ofertas em oracle cloud 09 07-2020
Sugestoes de ofertas em oracle cloud 09 07-2020Sugestoes de ofertas em oracle cloud 09 07-2020
Sugestoes de ofertas em oracle cloud 09 07-2020
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
 
Disponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Disponibilização de Serviços em IPv6 na UCS - Um Caso PráticoDisponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Disponibilização de Serviços em IPv6 na UCS - Um Caso Prático
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
 

Plus de André Carvalho

Containers na Globo.com - Passado, Presente e Futuro
Containers na Globo.com - Passado, Presente e FuturoContainers na Globo.com - Passado, Presente e Futuro
Containers na Globo.com - Passado, Presente e FuturoAndré Carvalho
 
Instrumenting Go applications with Prometheus
Instrumenting Go applications with PrometheusInstrumenting Go applications with Prometheus
Instrumenting Go applications with PrometheusAndré Carvalho
 
Tsuru - Deploys Fáceis e Seguros
Tsuru - Deploys Fáceis e SegurosTsuru - Deploys Fáceis e Seguros
Tsuru - Deploys Fáceis e SegurosAndré Carvalho
 
Classificação de séries temporais via divergente entre densidades de probabil...
Classificação de séries temporais via divergente entre densidades de probabil...Classificação de séries temporais via divergente entre densidades de probabil...
Classificação de séries temporais via divergente entre densidades de probabil...André Carvalho
 
Instrumentando aplicações Go com Prometheus
Instrumentando aplicações Go com PrometheusInstrumentando aplicações Go com Prometheus
Instrumentando aplicações Go com PrometheusAndré Carvalho
 
Um estudo sobre a aplicação de algoritmos genéticos no investimento em ações ...
Um estudo sobre a aplicação de algoritmos genéticos no investimento em ações ...Um estudo sobre a aplicação de algoritmos genéticos no investimento em ações ...
Um estudo sobre a aplicação de algoritmos genéticos no investimento em ações ...André Carvalho
 
Clusterização de padrões de candlesticks utilizando Mapas de Kohonen
Clusterização de padrões de candlesticks utilizando Mapas de KohonenClusterização de padrões de candlesticks utilizando Mapas de Kohonen
Clusterização de padrões de candlesticks utilizando Mapas de KohonenAndré Carvalho
 

Plus de André Carvalho (8)

Containers na Globo.com - Passado, Presente e Futuro
Containers na Globo.com - Passado, Presente e FuturoContainers na Globo.com - Passado, Presente e Futuro
Containers na Globo.com - Passado, Presente e Futuro
 
Go Execution Tracer
Go Execution TracerGo Execution Tracer
Go Execution Tracer
 
Instrumenting Go applications with Prometheus
Instrumenting Go applications with PrometheusInstrumenting Go applications with Prometheus
Instrumenting Go applications with Prometheus
 
Tsuru - Deploys Fáceis e Seguros
Tsuru - Deploys Fáceis e SegurosTsuru - Deploys Fáceis e Seguros
Tsuru - Deploys Fáceis e Seguros
 
Classificação de séries temporais via divergente entre densidades de probabil...
Classificação de séries temporais via divergente entre densidades de probabil...Classificação de séries temporais via divergente entre densidades de probabil...
Classificação de séries temporais via divergente entre densidades de probabil...
 
Instrumentando aplicações Go com Prometheus
Instrumentando aplicações Go com PrometheusInstrumentando aplicações Go com Prometheus
Instrumentando aplicações Go com Prometheus
 
Um estudo sobre a aplicação de algoritmos genéticos no investimento em ações ...
Um estudo sobre a aplicação de algoritmos genéticos no investimento em ações ...Um estudo sobre a aplicação de algoritmos genéticos no investimento em ações ...
Um estudo sobre a aplicação de algoritmos genéticos no investimento em ações ...
 
Clusterização de padrões de candlesticks utilizando Mapas de Kohonen
Clusterização de padrões de candlesticks utilizando Mapas de KohonenClusterização de padrões de candlesticks utilizando Mapas de Kohonen
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
  • 9. Resultados - Carga Inicial do Grafo 12655 12079 12361 12700 12600 12500 12400 12300 12200 12100 12000 11900 11800 11700 Neo4j Titan Hypergraph Tempo (ms) 100k Arestas
  • 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
  • 11. Resultados - Carga Inicial do Grafo 205789 255065 317381 350000 300000 250000 200000 150000 100000 50000 0 Neo4j Titan Hypergraph Tempo (ms) 2kk Arestas
  • 12. Resultados – Carga Inicial do Grafo 0 500000 1000000 1500000 2000000 2500000 3000000 100000 500000 900000 1300000 1700000 2100000 2500000 2900000 3300000 3700000 4100000 4500000 4900000 5300000 5700000 6100000 6500000 6900000 7300000 7700000 8100000 8500000 8900000 9300000 9700000 Tempo (ms) Quantidade de arestas Criação do Grafo 10kk Arestas Neo4j Titan Hypergraph
  • 13. Resultados – Carga Inicial do Grafo 60000000 50000000 40000000 30000000 20000000 10000000 0 Neo4j Titan Hypergraph Tempo (ms) 10kk Arestas
  • 14. Resultados – Carga Inicial do Grafo 0.056 0.154 0.934 0.64 2.38 4.35 4.47 Neo4j Titan Hypergraph 0.063 100k 0.063 0.056 0.154 2kk 0.934 0.64 2.38 10kk 4.35 4.47 15.60 15.60 ESPAÇO EM DISCO (GB) ESPAÇO OCUPADO EM DISCO
  • 15. Resultados – Inserção de Propriedades em nós Neo4j Titan Hypergraph 20 18 16 14 12 10 8 6 4 2 0 100k 1.198886076 0.994379747 0.603544304 2kk 1.1379 1.07584 14.87694 10kk 1.43385 18.7803 0 Tempo (ms) Tempo médio na inserção propriedades 100k 2kk 10kk
  • 16. Resultados – Menor Caminho entre dois nós Neo4j Titan Hypergraph 18 16 14 12 10 8 6 4 2 0 100k 0.07936 0.09338 0.43828 2kk 1.62647 0.24174 10kk 2.53481 17.08998 Tempo médio (ms) Calculo do Menor Caminho
  • 17. Resultados – Busca Em Largura Neo4j Titan Hypergraph 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 100k 0.079873418 0.096582278 0.523658228 2kk 0.123159335 0.898228739 Tempo (ms) médio Busca em Largura (profundidade max. 3)
  • 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
  • 21. Resultados – Busca Em Largura Busca em Largura Neo4j Neo4j HPC Titan Data Cache Titan 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 100k 0.079873418 0.065101266 0.068518987 0.096582278 2kk 0.123159335 0.091173021 0.386042033 0.898228739
  • 22. Resultados – Calculo de Centralidade Calculo de Centralidade Neo4j Neo4j HPC Titan Data Cache Titan 120000 100000 80000 60000 40000 20000 0 100k 2039 1308 5421 5897 2kk 13379 13692 101136 55537
  • 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