Grafos - Uma abordagem divertida - Latinoware 2014

2.061 visualizações

Publicada em

Grafos, ArangoDB, OrientDB, Neo4J, teoria de grafos. Palestra apresentada na Latinoware 2014

Publicada em: Tecnologia

Grafos - Uma abordagem divertida - Latinoware 2014

  1. 1. Grafos Uma abordagem divertida Latinoware 2014 Christiano Anderson Twitter: @dump
  2. 2. Agenda ● Apresentação ● Conceitos básicos de grafos ● Exemplos de uso ● Persistência em grafos
  3. 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. 4. Essa palestra não aborda... ● Conceitos mais aprofundados em grafos; ● Código (é uma palestra mais conceitual); ● Solução “bala de prata”;
  5. 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. 6. Grafo não é algo recente ● Quem se lembra das aulas de estrutura de dados? – Vetores (arrays); – Fila; – Pilha; – Árvores; – Grafos;
  7. 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. 8. Novas tecnologias de persistência
  9. 9. Pensar fora da caixa
  10. 10. Ser eficiente ● Usar a tecnologia certa no momento certo vai tornar seu trabalho absurdamente eficiente!
  11. 11. Grafos? Vértice / nós Representação de grafo com 4 vértices e 6 arestas Aresta
  12. 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
  13. 13. Exemplo clássico: Rede Social
  14. 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. 15. Representação de Grafos
  16. 16. Exemplo simples: música Led Zeppelin Queen Pink Floyd Sigur Rós Jethro Tull Gosta de
  17. 17. Outro exemplo HUGO GRAFO Utiliza tecnologia PROJETO x DEPTO DE PESQUISA Conhece Trabalha no Faz parte do É desenvolvedor do É colega do RAFA
  18. 18. Os nós podem ter atributos HUGO { tipo: 'funcionario', departamento: 'desenvolvimento', ano_nascimento: '1980', cidade: 'São Paulo' }
  19. 19. Como você faria essas representações no banco relacional?
  20. 20. Você não precisa de Tabelas para tudo Pense fora da caixa
  21. 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. 22. Quais as opções para usar grafos?
  23. 23. Se dividem em ● Apenas Grafos; ● Grafos ou Documentos;
  24. 24. 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
  25. 25. MATCH (keanu:Person { name:'Keanu Reeves' })-[:ACTED_IN]-(movie:Movie) RETURN movie
  26. 26. 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;
  27. 27. 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: [ ] ]
  28. 28. 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;
  29. 29. 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')
  30. 30. 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;
  31. 31. OBRIGADO! Siga-me no Twitter: @dump Christiano Anderson http://christiano.me

×