SlideShare uma empresa Scribd logo
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?
Grafos - Uma abordagem divertida - Latinoware 2014
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

Regressão - aula 02/04
Regressão - aula 02/04Regressão - aula 02/04
Regressão - aula 02/04
Rodrigo de Sá
 
Teoria dos Grafos
Teoria dos GrafosTeoria dos Grafos
Teoria dos Grafos
Gabriel Albuquerque
 
Pmbok 5a edição
Pmbok 5a ediçãoPmbok 5a edição
Pmbok 5a edição
Jandira Querino
 
Conceitos base de programação - parte 2
Conceitos base de programação - parte 2Conceitos base de programação - parte 2
Conceitos base de programação - parte 2
João Piedade
 
Descriçao de cargo gerente de operações
Descriçao de cargo gerente de operaçõesDescriçao de cargo gerente de operações
Descriçao de cargo gerente de operações
AndreSilva512364
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
Sérgio Souza Costa
 
Testes de hipóteses
Testes de hipótesesTestes de hipóteses
Testes de hipóteses
CLT Valuebased Services
 
1ª lista de exercícios de pesquisa operacional com gabarito
1ª lista de exercícios de pesquisa operacional   com gabarito1ª lista de exercícios de pesquisa operacional   com gabarito
1ª lista de exercícios de pesquisa operacional com gabarito
Antonio Rodrigues
 
Aula de distribuição de probabilidade[1]
Aula de distribuição de probabilidade[1]Aula de distribuição de probabilidade[1]
Aula de distribuição de probabilidade[1]
Tuane Paixão
 
5W1H
5W1H5W1H
Regressao linear multipla
Regressao linear multiplaRegressao linear multipla
Regressao linear multipla
aniziorochaaraujo
 
Tutorial BizAgi Modelagem de Processos de Negócio
Tutorial BizAgi Modelagem de Processos de NegócioTutorial BizAgi Modelagem de Processos de Negócio
Tutorial BizAgi Modelagem de Processos de Negócio
Rildo (@rildosan) Santos
 
Gestão da Qualidade Total
Gestão da Qualidade TotalGestão da Qualidade Total
Gestão da Qualidade Total
Kelen Mendes
 
Os quartis
Os quartisOs quartis
Os quartis
António Gomes
 
Aula 30 testes de hipóteses
Aula 30   testes de hipótesesAula 30   testes de hipóteses
Exercício SQL 2.pdf
Exercício SQL 2.pdfExercício SQL 2.pdf
Exercício SQL 2.pdf
Luciana Recart Cardoso
 
Variáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dadosVariáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dados
BrunoSilvaSantana
 
Estabelecendo um Escritorio de Projetos
Estabelecendo um Escritorio de ProjetosEstabelecendo um Escritorio de Projetos
Estabelecendo um Escritorio de Projetos
Ricardo Viana Vargas
 
Aulas 8 e 9 - Engenharia de Métodos
Aulas 8 e 9 - Engenharia de MétodosAulas 8 e 9 - Engenharia de Métodos
Aulas 8 e 9 - Engenharia de Métodos
Unidade Acedêmica de Engenharia de Produção
 
Indicadores de Desempenho - Ferramenta da Qualidade
Indicadores de Desempenho - Ferramenta da QualidadeIndicadores de Desempenho - Ferramenta da Qualidade
Indicadores de Desempenho - Ferramenta da Qualidade
Ideia Consultoria
 

Mais procurados (20)

Regressão - aula 02/04
Regressão - aula 02/04Regressão - aula 02/04
Regressão - aula 02/04
 
Teoria dos Grafos
Teoria dos GrafosTeoria dos Grafos
Teoria dos Grafos
 
Pmbok 5a edição
Pmbok 5a ediçãoPmbok 5a edição
Pmbok 5a edição
 
Conceitos base de programação - parte 2
Conceitos base de programação - parte 2Conceitos base de programação - parte 2
Conceitos base de programação - parte 2
 
Descriçao de cargo gerente de operações
Descriçao de cargo gerente de operaçõesDescriçao de cargo gerente de operações
Descriçao de cargo gerente de operações
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Testes de hipóteses
Testes de hipótesesTestes de hipóteses
Testes de hipóteses
 
1ª lista de exercícios de pesquisa operacional com gabarito
1ª lista de exercícios de pesquisa operacional   com gabarito1ª lista de exercícios de pesquisa operacional   com gabarito
1ª lista de exercícios de pesquisa operacional com gabarito
 
Aula de distribuição de probabilidade[1]
Aula de distribuição de probabilidade[1]Aula de distribuição de probabilidade[1]
Aula de distribuição de probabilidade[1]
 
5W1H
5W1H5W1H
5W1H
 
Regressao linear multipla
Regressao linear multiplaRegressao linear multipla
Regressao linear multipla
 
Tutorial BizAgi Modelagem de Processos de Negócio
Tutorial BizAgi Modelagem de Processos de NegócioTutorial BizAgi Modelagem de Processos de Negócio
Tutorial BizAgi Modelagem de Processos de Negócio
 
Gestão da Qualidade Total
Gestão da Qualidade TotalGestão da Qualidade Total
Gestão da Qualidade Total
 
Os quartis
Os quartisOs quartis
Os quartis
 
Aula 30 testes de hipóteses
Aula 30   testes de hipótesesAula 30   testes de hipóteses
Aula 30 testes de hipóteses
 
Exercício SQL 2.pdf
Exercício SQL 2.pdfExercício SQL 2.pdf
Exercício SQL 2.pdf
 
Variáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dadosVariáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dados
 
Estabelecendo um Escritorio de Projetos
Estabelecendo um Escritorio de ProjetosEstabelecendo um Escritorio de Projetos
Estabelecendo um Escritorio de Projetos
 
Aulas 8 e 9 - Engenharia de Métodos
Aulas 8 e 9 - Engenharia de MétodosAulas 8 e 9 - Engenharia de Métodos
Aulas 8 e 9 - Engenharia de Métodos
 
Indicadores de Desempenho - Ferramenta da Qualidade
Indicadores de Desempenho - Ferramenta da QualidadeIndicadores de Desempenho - Ferramenta da Qualidade
Indicadores de Desempenho - Ferramenta da Qualidade
 

Destaque

Introdução a nosql - II SACIC
Introdução a nosql - II SACICIntrodução a nosql - II SACIC
Introdução a nosql - II SACIC
caironoleto
 
Microsoft MTACs
Microsoft MTACsMicrosoft MTACs
Microsoft MTACs
Priscila Mayumi
 
Grafos
GrafosGrafos
Grafos
rodrigogolin
 
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
ArangoDB 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 Relationships
Fabrizio 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() KW
gmccarvell
 
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
 
Introdução ao neo4j
Introdução ao neo4jIntrodução ao neo4j
Introdução ao neo4j
Jhonathan de Souza Soares
 
An agile approach to cloud infrastructure
An agile approach to cloud infrastructureAn agile approach to cloud infrastructure
An agile approach to cloud infrastructure
Richard Seroter
 
The Open Source Messaging Landscape
The Open Source Messaging LandscapeThe Open Source Messaging Landscape
The Open Source Messaging Landscape
Richard Seroter
 
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
 
OrientDB for real & Web App development
OrientDB for real & Web App developmentOrientDB for real & Web App development
OrientDB for real & Web App development
Luca Garulli
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
Rafael 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 Sociais
fabiomalini
 
OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0
Orient Technologies
 
Data Modeling with Neo4j
Data Modeling with Neo4jData Modeling with Neo4j
Data Modeling with Neo4j
Neo4j
 

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

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
tdc-globalcode
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
Ricardo Terra
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
Tiago Maluta
 
G.O. - Grafos Online
G.O. - Grafos OnlineG.O. - Grafos Online
G.O. - Grafos Online
dudleyy
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
Laís Berlatto
 
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
Pablo Dall'Oglio
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
ricobl
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
Alexandre Machado
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
Luís Cobucci
 
Decoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e ReactDecoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e React
Cleber 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).pdf
FernandoIto8
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
Christiano Anderson
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
Edu Queiroz
 
Qual linguagem escolher?
Qual linguagem escolher?Qual linguagem escolher?
Qual linguagem escolher?
COTIC-PROEG (UFPA)
 
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
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
Rômulo Jales
 
Tutorial kturtle iniciante
Tutorial kturtle inicianteTutorial kturtle iniciante
Tutorial kturtle iniciante
Rodrigo 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 PHP
Pablo Dall'Oglio
 
Html 5 datainfo
Html 5   datainfoHtml 5   datainfo
Html 5 datainfo
Romário J. Santos
 
Programar 1215
Programar  1215Programar  1215
Programar 1215
tugafree
 

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
 
Programar 1215
Programar  1215Programar  1215
Programar 1215
 

Mais de Christiano Anderson

Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
Christiano Anderson
 
certificadoTDC2016Floripa
certificadoTDC2016FloripacertificadoTDC2016Floripa
certificadoTDC2016Floripa
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 - FISL16
Christiano 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 GeoDjango
Christiano 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 2014
Christiano Anderson
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
Christiano Anderson
 
Big Data Latinoware 2014
Big Data Latinoware 2014Big Data Latinoware 2014
Big Data Latinoware 2014
Christiano Anderson
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
Christiano 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 15
Christiano 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 ERI
Christiano 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 saber
Christiano Anderson
 
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
Christiano Anderson
 
GeoDjango
GeoDjangoGeoDjango
Scrum
ScrumScrum
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
Christiano Anderson
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
Christiano Anderson
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
Christiano Anderson
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
Christiano Anderson
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
Christiano Anderson
 
Python and MongoDB
Python and MongoDBPython and MongoDB
Python and MongoDB
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
 

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?
  • 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