SlideShare uma empresa Scribd logo
1 de 32
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

Mais conteúdo relacionado

Mais procurados

Aula payback simples e descontado
Aula   payback simples e descontadoAula   payback simples e descontado
Aula payback simples e descontado
Daniel Moura
 

Mais procurados (20)

Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
 
Introdução à Programação
Introdução à ProgramaçãoIntrodução à Programação
Introdução à Programação
 
Introdução à Lógica de Predicados
Introdução à Lógica de PredicadosIntrodução à Lógica de Predicados
Introdução à Lógica de Predicados
 
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
 
Introdução ao desenvolvimento de páginas web estáticas
Introdução ao desenvolvimento de páginas web estáticasIntrodução ao desenvolvimento de páginas web estáticas
Introdução ao desenvolvimento de páginas web estáticas
 
Aula 1: Conhecendo o Arduino
Aula 1: Conhecendo o ArduinoAula 1: Conhecendo o Arduino
Aula 1: Conhecendo o Arduino
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Lógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosLógica de Programação - Algoritmos
Lógica de Programação - Algoritmos
 
Aula15 - Array PHP
Aula15 - Array PHPAula15 - Array PHP
Aula15 - Array PHP
 
Algoritmo recursivo
Algoritmo recursivoAlgoritmo recursivo
Algoritmo recursivo
 
Grafos
GrafosGrafos
Grafos
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e Programação
 
Modelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de softwareModelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de software
 
Matemática Discreta - Introdução
Matemática Discreta - IntroduçãoMatemática Discreta - Introdução
Matemática Discreta - Introdução
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScriptCurso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
 
Aula payback simples e descontado
Aula   payback simples e descontadoAula   payback simples e descontado
Aula payback simples e descontado
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugol
 

Destaque

ArangoDB – A different approach to NoSQL
ArangoDB – A different approach to NoSQLArangoDB – A different approach to NoSQL
ArangoDB – A different approach to NoSQL
ArangoDB Database
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
Rafael Ponte
 

Destaque (16)

Introdução a nosql - II SACIC
Introdução a nosql - II SACICIntrodução a nosql - II SACIC
Introdução a nosql - II SACIC
 
Microsoft MTACs
Microsoft MTACsMicrosoft MTACs
Microsoft MTACs
 
Grafos
GrafosGrafos
Grafos
 
FOXX - a Javascript application framework on top of ArangoDB
FOXX - a Javascript application framework on top of ArangoDBFOXX - a Javascript application framework on top of ArangoDB
FOXX - a Javascript application framework on top of ArangoDB
 
OrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data RelationshipsOrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data Relationships
 
OrientDB & Node.js Overview - JS.Everywhere() KW
OrientDB & Node.js Overview - JS.Everywhere() KWOrientDB & Node.js Overview - JS.Everywhere() KW
OrientDB & Node.js Overview - JS.Everywhere() KW
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
Introdução ao neo4j
Introdução ao neo4jIntrodução ao neo4j
Introdução ao neo4j
 
An agile approach to cloud infrastructure
An agile approach to cloud infrastructureAn agile approach to cloud infrastructure
An agile approach to cloud infrastructure
 
The Open Source Messaging Landscape
The Open Source Messaging LandscapeThe Open Source Messaging Landscape
The Open Source Messaging Landscape
 
ArangoDB – A different approach to NoSQL
ArangoDB – A different approach to NoSQLArangoDB – A different approach to NoSQL
ArangoDB – A different approach to NoSQL
 
OrientDB for real & Web App development
OrientDB for real & Web App developmentOrientDB for real & Web App development
OrientDB for real & Web App development
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
Introdução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes SociaisIntrodução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes Sociais
 
OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0
 
Data Modeling with Neo4j
Data Modeling with Neo4jData Modeling with Neo4j
Data Modeling with Neo4j
 

Semelhante a Grafos - Uma abordagem divertida - Latinoware 2014

Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
ricobl
 
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013
Pablo Dall'Oglio
 
Tutorial kturtle iniciante
Tutorial kturtle inicianteTutorial kturtle iniciante
Tutorial kturtle iniciante
Rodrigo Costa
 

Semelhante a Grafos - Uma abordagem divertida - Latinoware 2014 (20)

TDC2017 | POA Trilha Arquitetura - Thinking in GraphQL
TDC2017 | POA Trilha Arquitetura - Thinking in GraphQLTDC2017 | POA Trilha Arquitetura - Thinking in GraphQL
TDC2017 | POA Trilha Arquitetura - Thinking in GraphQL
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
G.O. - Grafos Online
G.O. - Grafos OnlineG.O. - Grafos Online
G.O. - Grafos Online
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Criando software para o futuro com DDD, Arquitetura, Patterns, e Atitude
Criando software para o futuro com DDD, Arquitetura, Patterns, e AtitudeCriando software para o futuro com DDD, Arquitetura, Patterns, e Atitude
Criando software para o futuro com DDD, Arquitetura, Patterns, e Atitude
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Decoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e ReactDecoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e React
 
TDC Conn 2022_ O Esqueleto de um Projeto de Dados (2).pdf
TDC Conn 2022_ O Esqueleto de um Projeto de Dados (2).pdfTDC Conn 2022_ O Esqueleto de um Projeto de Dados (2).pdf
TDC Conn 2022_ O Esqueleto de um Projeto de Dados (2).pdf
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 
Qual linguagem escolher?
Qual linguagem escolher?Qual linguagem escolher?
Qual linguagem escolher?
 
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
Tutorial kturtle iniciante
Tutorial kturtle inicianteTutorial kturtle iniciante
Tutorial kturtle iniciante
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHP
 
Html 5 datainfo
Html 5   datainfoHtml 5   datainfo
Html 5 datainfo
 
Revista programar 51
Revista programar 51Revista programar 51
Revista programar 51
 

Mais de Christiano Anderson

Mais de Christiano Anderson (20)

Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
certificadoTDC2016Floripa
certificadoTDC2016FloripacertificadoTDC2016Floripa
certificadoTDC2016Floripa
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
 
Mapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjangoMapeando a Terra com soluções livres e GeoDjango
Mapeando a Terra com soluções livres e GeoDjango
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Big Data Latinoware 2014
Big Data Latinoware 2014Big Data Latinoware 2014
Big Data Latinoware 2014
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERIGeo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
GeoDjango
GeoDjangoGeoDjango
GeoDjango
 
Scrum
ScrumScrum
Scrum
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Python and MongoDB
Python and MongoDBPython and MongoDB
Python and MongoDB
 

Último

Último (9)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Grafos - Uma abordagem divertida - Latinoware 2014

  • 1. Grafos Uma abordagem divertida 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ão aborda... ● 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ã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.
  • 8. Novas tecnologias de persistência
  • 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? ● Leonhard Euler → Inventor da teoria de grafos – 1736 – Qual a possibilidade de atravessar todas as pontes da cidade sem repetir nenhuma? – Grafo Euleriano
  • 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)
  • 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 podem ter atributos HUGO { tipo: 'funcionario', departamento: 'desenvolvimento', ano_nascimento: '1980', cidade: 'São Paulo' }
  • 19. Como você faria essas representações no banco relacional?
  • 20. Você não precisa de Tabelas para tudo Pense fora da caixa
  • 21. Para que usar Grafos? ● Sistemas de recomendação ● Catálogo de produtos ● Filtragem colaborativa ● Redes sociais (o clássico) ● Sistemas geoespaciais ● E muito mais...
  • 22. Quais as opções para usar grafos?
  • 23.
  • 24. Se dividem em ● Apenas Grafos; ● Grafos ou Documentos;
  • 25. 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
  • 26. MATCH (keanu:Person { name:'Keanu Reeves' })-[:ACTED_IN]-(movie:Movie) RETURN movie
  • 27. 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;
  • 28. 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: [ ] ]
  • 29. 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;
  • 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 no Twitter: @dump Christiano Anderson http://christiano.me