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

UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesRodrigo Cascarrolho
 
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 }Mariana Camargo
 
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOKAula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOKDaniela Brauner
 
Plano projeto implantação servicedesk
Plano projeto implantação servicedeskPlano projeto implantação servicedesk
Plano projeto implantação servicedeskFernando Palma
 
Algoritmos e lógica de programação com Python
Algoritmos e lógica de programação com PythonAlgoritmos e lógica de programação com Python
Algoritmos e lógica de programação com PythonBruno Luvizotto Carli
 
O Papel do Gerente de Projetos: Atribuições e Ações
O Papel do Gerente de Projetos: Atribuições e AçõesO Papel do Gerente de Projetos: Atribuições e Ações
O Papel do Gerente de Projetos: Atribuições e AçõesAdson Cunha, MSc, PMP®
 
Logica computacional
Logica computacionalLogica computacional
Logica computacionalJota Thin
 
Gerenciamento de tempo em projetos
Gerenciamento de tempo em projetosGerenciamento de tempo em projetos
Gerenciamento de tempo em projetosPaulo Junior
 
Modelo Auto Avaliacao
Modelo Auto AvaliacaoModelo Auto Avaliacao
Modelo Auto AvaliacaoDanielaSantos
 
Scrum e o gerenciamento de projetos
Scrum e o gerenciamento de projetosScrum e o gerenciamento de projetos
Scrum e o gerenciamento de projetosVitor Massari
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação cClausia Antoneli
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoMauro Pereira
 
Elaboração e Gestão de Projetos - 1. Fundamentos de Gestão de Projetos
Elaboração e Gestão de Projetos - 1. Fundamentos de Gestão de ProjetosElaboração e Gestão de Projetos - 1. Fundamentos de Gestão de Projetos
Elaboração e Gestão de Projetos - 1. Fundamentos de Gestão de Projetoselonvila
 

Mais procurados (20)

UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
Gestão de projetos
Gestão de projetosGestão de projetos
Gestão de projetos
 
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 }
 
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOKAula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
Aula01 Gerência de Projetos - Conceitos e áreas de conhecimento do PMBOK
 
Plano projeto implantação servicedesk
Plano projeto implantação servicedeskPlano projeto implantação servicedesk
Plano projeto implantação servicedesk
 
Algoritmos e lógica de programação com Python
Algoritmos e lógica de programação com PythonAlgoritmos e lógica de programação com Python
Algoritmos e lógica de programação com Python
 
O Papel do Gerente de Projetos: Atribuições e Ações
O Papel do Gerente de Projetos: Atribuições e AçõesO Papel do Gerente de Projetos: Atribuições e Ações
O Papel do Gerente de Projetos: Atribuições e Ações
 
Logica computacional
Logica computacionalLogica computacional
Logica computacional
 
Roda dos alimentos
Roda dos alimentosRoda dos alimentos
Roda dos alimentos
 
Gerenciamento de tempo em projetos
Gerenciamento de tempo em projetosGerenciamento de tempo em projetos
Gerenciamento de tempo em projetos
 
Custo pmbok
Custo pmbokCusto pmbok
Custo pmbok
 
e-portfolio tools
e-portfolio toolse-portfolio tools
e-portfolio tools
 
Modelo Auto Avaliacao
Modelo Auto AvaliacaoModelo Auto Avaliacao
Modelo Auto Avaliacao
 
Gestão de projetos
Gestão de projetosGestão de projetos
Gestão de projetos
 
Introdução ao RUP
Introdução ao RUPIntrodução ao RUP
Introdução ao RUP
 
Scrum e o gerenciamento de projetos
Scrum e o gerenciamento de projetosScrum e o gerenciamento de projetos
Scrum e o gerenciamento de projetos
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação c
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
 
Redação técnica ata
Redação técnica    ataRedação técnica    ata
Redação técnica ata
 
Elaboração e Gestão de Projetos - 1. Fundamentos de Gestão de Projetos
Elaboração e Gestão de Projetos - 1. Fundamentos de Gestão de ProjetosElaboração e Gestão de Projetos - 1. Fundamentos de Gestão de Projetos
Elaboração e Gestão de Projetos - 1. Fundamentos de Gestão de Projetos
 

Destaque

Introdução a nosql - II SACIC
Introdução a nosql - II SACICIntrodução a nosql - II SACIC
Introdução a nosql - II SACICcaironoleto
 
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 ArangoDBArangoDB Database
 
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 RelationshipsFabrizio Fortino
 
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() KWgmccarvell
 
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íPriscila Mayumi
 
An agile approach to cloud infrastructure
An agile approach to cloud infrastructureAn agile approach to cloud infrastructure
An agile approach to cloud infrastructureRichard Seroter
 
The Open Source Messaging Landscape
The Open Source Messaging LandscapeThe Open Source Messaging Landscape
The Open Source Messaging LandscapeRichard Seroter
 
ArangoDB – A different approach to NoSQL
ArangoDB – A different approach to NoSQLArangoDB – A different approach to NoSQL
ArangoDB – A different approach to NoSQLArangoDB Database
 
OrientDB for real & Web App development
OrientDB for real & Web App developmentOrientDB for real & Web App development
OrientDB for real & Web App developmentLuca Garulli
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 
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 Sociaisfabiomalini
 
OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0Orient Technologies
 
Data Modeling with Neo4j
Data Modeling with Neo4jData Modeling with Neo4j
Data Modeling with Neo4jNeo4j
 

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 Uma abordagem divertida sobre grafos com Neo4j, ArangoDB e OrientDB

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 GraphQLtdc-globalcode
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
G.O. - Grafos Online
G.O. - Grafos OnlineG.O. - Grafos Online
G.O. - Grafos Onlinedudleyy
 
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 AtitudePablo Dall'Oglio
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.comricobl
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
Decoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e ReactDecoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e ReactCleber Gasparoto
 
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).pdfFernandoIto8
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programaçãoEdu Queiroz
 
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 2013Pablo Dall'Oglio
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 
Tutorial kturtle iniciante
Tutorial kturtle inicianteTutorial kturtle iniciante
Tutorial kturtle inicianteRodrigo Costa
 
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 PHPPablo Dall'Oglio
 
Programar 1215
Programar  1215Programar  1215
Programar 1215tugafree
 

Semelhante a Uma abordagem divertida sobre grafos com Neo4j, ArangoDB e OrientDB (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
 
Programar 1215
Programar  1215Programar  1215
Programar 1215
 

Mais de Christiano Anderson

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 - FISL16Christiano Anderson
 
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 GeoDjangoChristiano Anderson
 
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 2014Christiano Anderson
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
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 15Christiano Anderson
 
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 ERIChristiano Anderson
 
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 saberChristiano Anderson
 
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 inteligentesChristiano Anderson
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano 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
 

Uma abordagem divertida sobre grafos com Neo4j, ArangoDB e OrientDB

  • 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