Grafos 
Uma abordagem divertida 
Latinoware 2014 
Christiano Anderson 
Twitter: @dump
Agenda 
● Apresentação 
● Conceitos básicos de grafos 
● Exemplos de uso 
● Persistência em grafos
Quem sou? 
● Especialista em Big Data e NoSQL na Propus; 
● Desenvolvedor Python; 
● Trabalha desde o início da internet comercial do Brasil; 
● Colabora com diversos projetos em software livre; 
● Fundador do MUG-SP; 
● Twitter: @dump 
● Blog: http://christiano.me
Essa palestra não aborda... 
● Conceitos mais aprofundados em grafos; 
● Código (é uma palestra mais conceitual); 
● Solução “bala de prata”;
Novo paradigma? 
● Grafo não é algo recente; 
● O mundo não gira apenas no banco relacional; 
● Inovação = novas tecnologias; 
● Inovação = pensar fora da caixa; 
● Inovação = ser eficiente;
Grafo não é algo recente 
● Quem se lembra das aulas de estrutura de 
dados? 
– Vetores (arrays); 
– Fila; 
– Pilha; 
– Árvores; 
– Grafos;
O mundo não gira apenas no banco 
relacional 
● Muita gente ainda está viciada nos 
RDBMs, quando pensa em um 
novo projeto, já começa imaginar a 
estrutura de tabelas; 
● Um arquiteto precisa pensar na 
melhor solução para cada caso e 
saber que o mundo da persistência 
não tem apenas os RDBMs.
Novas tecnologias de persistência
Pensar fora da caixa
Ser eficiente 
● Usar a tecnologia certa no momento certo vai 
tornar seu trabalho absurdamente eficiente!
Grafos? 
Vértice / nós 
Representação de grafo com 4 
vértices e 6 arestas 
Aresta
Grafos? 
● Leonhard Euler → Inventor da teoria de grafos 
– 1736 
– Qual a possibilidade de atravessar todas as pontes 
da cidade sem repetir nenhuma? 
– Grafo Euleriano
Exemplo clássico: Rede Social
Teoria dos grafos 
A teoria dos grafos é um ramo da matemática que estuda as 
relações entre os objetos de um determinado conjunto. Para tal 
são empregadas estruturas chamadas de grafos, G(V,A), onde V é 
um conjunto não vazio de objetos denominados vértices e A é um 
conjunto de pares não ordenados de V, chamado arestas. 
(fonte: Wikipedia)
Representação de Grafos
Exemplo simples: música 
Led Zeppelin 
Queen 
Pink Floyd 
Sigur Rós 
Jethro Tull 
Gosta de
Outro exemplo 
HUGO 
GRAFO 
Utiliza tecnologia 
PROJETO 
x 
DEPTO 
DE 
PESQUISA 
Conhece 
Trabalha no 
Faz parte do 
É desenvolvedor do 
É colega do 
RAFA
Os nós podem ter atributos 
HUGO 
{ 
tipo: 'funcionario', 
departamento: 'desenvolvimento', 
ano_nascimento: '1980', 
cidade: 'São Paulo' 
}
Como você faria essas 
representações no banco relacional?
Você não precisa de 
Tabelas para tudo 
Pense fora da caixa
Para que usar Grafos? 
● Sistemas de recomendação 
● Catálogo de produtos 
● Filtragem colaborativa 
● Redes sociais (o clássico) 
● Sistemas geoespaciais 
● E muito mais...
Quais as opções para usar grafos?
Se dividem em 
● Apenas Grafos; 
● Grafos ou Documentos;
Neo4J 
● Persistência apenas em Grafos; 
● Implementação em Java; 
● É o banco mais popular em Grafos; 
● GPL (mas também possui suporte comercial); 
● Cypher Query Language
MATCH (keanu:Person { name:'Keanu 
Reeves' })-[:ACTED_IN]-(movie:Movie) 
RETURN movie
ArangoDB 
● Multi Modelagem: 
– Grafos 
– Documentos 
● Query Language poderosa (AQL); 
● Desenvolvido em C++ :-) 
● Interface REST HTTP; 
● FOXX → Framework que auxilia desenvolvimento web; 
● Drivers nativos para quase todas as linguagens; 
● Livre, mas possui suporte comercial;
ArangoShell 
arangosh> var graph_module = require("org/arangodb/general-graph"); 
arangosh> var graph = graph_module._create("myGraph"); 
arangosh> graph; 
[ Graph myGraph EdgeDefinitions: [ ] VertexCollections: [ ] ] 
arangosh> graph._addVertexCollection("shop"); 
arangosh> graph._addVertexCollection("customer"); 
arangosh> graph._addVertexCollection("pet"); 
arangosh> graph 
arangosh> var rel = graph_module._directedRelation("isCustomer", ["shop"], 
["customer"]); 
arangosh> graph._extendEdgeDefinitions(rel); 
arangosh> graph; 
[ Graph myGraph EdgeDefinitions: [ 
"isCustomer: [shop] -> [customer]" 
] VertexCollections: [ ] ]
OrientDB 
● Assim como ArangoDB, é multi-modelagem: 
– Documento 
– Grafos 
● Desenvolvido em Java; 
● Suporta transações ACID; 
● Possui linguagem semelhante a SQL; 
● Livre, mas possui suporte comercial também;
Query Language - Exemplos 
orientdb> insert into V set name = 'Jay' 
create record with RID #9:0 
orientdb> create vertex V set name = 'Jay' 
create vertex with RID #9:1 
orientdb> create edge Eat from (select from Person where name = 
'Luca') to (select from Restaurant where name = 'Dante')
Por onde começar? 
● Todas as 3 tecnologias citadas nessa palestra possuem ótima 
documentação; 
● Avalie sua necessidade, entenda se grafo vai resolver seu 
problema; 
● Realize testes, POCs, avaliações com uma pequena massa 
de dados; 
● Faça os treinamentos disponíveis em cada site; 
● ArangoDB parece o mais versátil para começar; 
● Use Neo4J caso precise apenas de Grafos; 
● Java Developers: vejam o OrientDB;
OBRIGADO! 
Siga-me no Twitter: @dump 
Christiano Anderson 
http://christiano.me

Grafos - Uma abordagem divertida - Latinoware 2014

  • 1.
    Grafos Uma abordagemdivertida Latinoware 2014 Christiano Anderson Twitter: @dump
  • 2.
    Agenda ● Apresentação ● Conceitos básicos de grafos ● Exemplos de uso ● Persistência em grafos
  • 3.
    Quem sou? ●Especialista em Big Data e NoSQL na Propus; ● Desenvolvedor Python; ● Trabalha desde o início da internet comercial do Brasil; ● Colabora com diversos projetos em software livre; ● Fundador do MUG-SP; ● Twitter: @dump ● Blog: http://christiano.me
  • 4.
    Essa palestra nãoaborda... ● Conceitos mais aprofundados em grafos; ● Código (é uma palestra mais conceitual); ● Solução “bala de prata”;
  • 5.
    Novo paradigma? ●Grafo não é algo recente; ● O mundo não gira apenas no banco relacional; ● Inovação = novas tecnologias; ● Inovação = pensar fora da caixa; ● Inovação = ser eficiente;
  • 6.
    Grafo não éalgo recente ● Quem se lembra das aulas de estrutura de dados? – Vetores (arrays); – Fila; – Pilha; – Árvores; – Grafos;
  • 7.
    O mundo nãogira apenas no banco relacional ● Muita gente ainda está viciada nos RDBMs, quando pensa em um novo projeto, já começa imaginar a estrutura de tabelas; ● Um arquiteto precisa pensar na melhor solução para cada caso e saber que o mundo da persistência não tem apenas os RDBMs.
  • 8.
    Novas tecnologias depersistência
  • 9.
  • 10.
    Ser eficiente ●Usar a tecnologia certa no momento certo vai tornar seu trabalho absurdamente eficiente!
  • 11.
    Grafos? Vértice /nós Representação de grafo com 4 vértices e 6 arestas Aresta
  • 12.
    Grafos? ● LeonhardEuler → Inventor da teoria de grafos – 1736 – Qual a possibilidade de atravessar todas as pontes da cidade sem repetir nenhuma? – Grafo Euleriano
  • 13.
  • 14.
    Teoria dos grafos A teoria dos grafos é um ramo da matemática que estuda as relações entre os objetos de um determinado conjunto. Para tal são empregadas estruturas chamadas de grafos, G(V,A), onde V é um conjunto não vazio de objetos denominados vértices e A é um conjunto de pares não ordenados de V, chamado arestas. (fonte: Wikipedia)
  • 15.
  • 16.
    Exemplo simples: música Led Zeppelin Queen Pink Floyd Sigur Rós Jethro Tull Gosta de
  • 17.
    Outro exemplo HUGO GRAFO Utiliza tecnologia PROJETO x DEPTO DE PESQUISA Conhece Trabalha no Faz parte do É desenvolvedor do É colega do RAFA
  • 18.
    Os nós podemter atributos HUGO { tipo: 'funcionario', departamento: 'desenvolvimento', ano_nascimento: '1980', cidade: 'São Paulo' }
  • 19.
    Como você fariaessas representações no banco relacional?
  • 20.
    Você não precisade Tabelas para tudo Pense fora da caixa
  • 21.
    Para que usarGrafos? ● Sistemas de recomendação ● Catálogo de produtos ● Filtragem colaborativa ● Redes sociais (o clássico) ● Sistemas geoespaciais ● E muito mais...
  • 22.
    Quais as opçõespara usar grafos?
  • 24.
    Se dividem em ● Apenas Grafos; ● Grafos ou Documentos;
  • 25.
    Neo4J ● Persistênciaapenas em Grafos; ● Implementação em Java; ● É o banco mais popular em Grafos; ● GPL (mas também possui suporte comercial); ● Cypher Query Language
  • 26.
    MATCH (keanu:Person {name:'Keanu Reeves' })-[:ACTED_IN]-(movie:Movie) RETURN movie
  • 27.
    ArangoDB ● MultiModelagem: – Grafos – Documentos ● Query Language poderosa (AQL); ● Desenvolvido em C++ :-) ● Interface REST HTTP; ● FOXX → Framework que auxilia desenvolvimento web; ● Drivers nativos para quase todas as linguagens; ● Livre, mas possui suporte comercial;
  • 28.
    ArangoShell arangosh> vargraph_module = require("org/arangodb/general-graph"); arangosh> var graph = graph_module._create("myGraph"); arangosh> graph; [ Graph myGraph EdgeDefinitions: [ ] VertexCollections: [ ] ] arangosh> graph._addVertexCollection("shop"); arangosh> graph._addVertexCollection("customer"); arangosh> graph._addVertexCollection("pet"); arangosh> graph arangosh> var rel = graph_module._directedRelation("isCustomer", ["shop"], ["customer"]); arangosh> graph._extendEdgeDefinitions(rel); arangosh> graph; [ Graph myGraph EdgeDefinitions: [ "isCustomer: [shop] -> [customer]" ] VertexCollections: [ ] ]
  • 29.
    OrientDB ● Assimcomo ArangoDB, é multi-modelagem: – Documento – Grafos ● Desenvolvido em Java; ● Suporta transações ACID; ● Possui linguagem semelhante a SQL; ● Livre, mas possui suporte comercial também;
  • 30.
    Query Language -Exemplos orientdb> insert into V set name = 'Jay' create record with RID #9:0 orientdb> create vertex V set name = 'Jay' create vertex with RID #9:1 orientdb> create edge Eat from (select from Person where name = 'Luca') to (select from Restaurant where name = 'Dante')
  • 31.
    Por onde começar? ● Todas as 3 tecnologias citadas nessa palestra possuem ótima documentação; ● Avalie sua necessidade, entenda se grafo vai resolver seu problema; ● Realize testes, POCs, avaliações com uma pequena massa de dados; ● Faça os treinamentos disponíveis em cada site; ● ArangoDB parece o mais versátil para começar; ● Use Neo4J caso precise apenas de Grafos; ● Java Developers: vejam o OrientDB;
  • 32.
    OBRIGADO! Siga-me noTwitter: @dump Christiano Anderson http://christiano.me