Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon Neptune - Uma primeira olhada do ponto d...

Marcelo Palladino
July 26, 2018
36

Amazon Neptune - Uma primeira olhada do ponto de vista do desenvolvedor

Slides da apresentação feita no Developer Lounge do AWS Summit São Paulo em 2018, expondo conceitos sobre banco de dados de grafos e aplicação utilizando o Amazon Neptune.

Marcelo Palladino

July 26, 2018
Tweet

Transcript

  1. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Marcelo Palladino Arquiteto de Software, Hi Platform Amazon Neptune Uma olhada do ponto de vista do desenvolvedor
  2. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Amazon Neptune Serviço de banco de dados orientado a grafos rápido, confiável e totalmente gerenciado que facilita a criação de aplicações que trabalham com grafos.
  3. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Performance e escalabilidade • Até 15 réplicas de leitura • Três zonas de disponibilidade • Podendo executar mais de 100.000 consultas por segundo • Latência de milisegundos
  4. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Alta disponibilidade e durabilidade • Compatível com ACID (Atomicity, Consistency, Isolation, Durability) • Projeto para 99,99% de disponibilidade • Tolerante a falhas (seis cópias dos dados em três zonas de disponibilidade) • Recuperação automática (backups contínuos para o S3 e failover de instância com tempos inferiores a 30 segundos)
  5. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Segurança • Integrado à VPC • Suporte a criptografia (inclusive em trânsito)
  6. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Abrir a caixa de ferramentas! :)
  7. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Modelos e linguagens de consulta suportadas • Property Graph - Apache TinkerPop Gremlin • W3C’s RDF (Resource Description Framework) - SPARQL
  8. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo Pessoa Id Nome 1 Caio 2 Camila Comida Id Nome 3 Pastel 4 Feijoada Pessoa_Comida IdPessoa IdComida 1 3 2 3 2 4
  9. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo • Tabelas/Entidades x Vértices/Nós • Colunas x Propriedades • Relacionamentos? Vértice Propriedade Label (representa o “tipo” da entidade)
  10. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Aresta/relacionamento: “cidadão de primeira classe” Aresta Relacionamento (contém direção, semântica, pode ter propriedades) Vértice Vértice
  11. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Ferramentas para começar... • Amazon Neptune • Amazon Cloud9 • Gremlin server ▪ https://www.apache.org/dyn/closer.lua/tinkerpop/3.3.3/apache-tinkerp op-gremlin-server-3.3.3-bin.zip • Gremlin console ▪ https://www.apache.org/dyn/closer.lua/tinkerpop/3.3.3/apache-tinkerp op-gremlin-console-3.3.3-bin.zip • .net core ▪ https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-dotnet core.html#sample-dotnetcore-setup • Gremlin.NET ▪ nuget install Gremlin.Net • Graph Explorer ▪ https://github.com/bricaud/graphexp
  12. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Pontos de atenção • Configuração do Java (Gremlin console) • Configuração do host remoto (Gremlin console) • Configuração da saída do console (Gremlin console) • Security Groups
  13. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Gremlin Está para o banco de dados orientado a grafos assim como o SQL está para o banco de dados relacional.
  14. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Gremlin/.net core • Criando vértices (addV) • Criando arestas (addE, from, to) • Criando propriedades (property) • Listando ◦ Vértices ◦ Arestas ◦ Limitando retornos ▪ Filtros (has, is, limit) ▪ Predicados (eq, neq, gt, lt, gte, lte, between) • Navegando pelo grafo
  15. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Gremlin: mais alguns steps úteis • Group ◦ By • Count • Drop • Explain • ... http://tinkerpop.apache.org/docs/3.3.3/reference/#graph-traversal-steps
  16. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Apache Tinkerpop Gremlin Atenção às diferenças de implementação de cada servidor https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differ ences.html
  17. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo Pessoa Id Nome 1 Caio 2 Camila 5 Lucas Amizade IdPessoa IdAmigo 1 2 2 1 2 5 5 1 ...
  18. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo: Quem são os amigos da “Camila”? SELECT p1.Nome FROM Pessoa p1 JOIN Amizade ON Amizade.IdAmigo = p1.Id JOIN Pessoa p2 ON Amizade.IdPessoa = p2.Id WHERE p2.Nome = 'Camila'
  19. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo: Quem são os amigos da “Camila”? g.V().has("nome", "Camila").out("AMIGO_DE")
  20. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo: Com quem a “Camila” tem amizade? SELECT p1.Nome FROM Pessoa p1 JOIN Amizade ON Amizade.IdPessoa = p1.Id JOIN Pessoa p2 ON Amizade.IdAmigo = p2.Id WHERE p2.Nome = 'Camila'
  21. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo: Com quem a “Camila” tem amizade? g.V().where(outE("AMIGO_DE").inV().has("nome", "Camila").and().inE("AMIGO_DE").outV().has("nome", "Camila")).values()
  22. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo: Quem são os “amigos dos amigos” do “Lucas”? SELECT p1.Nome AS 'Pessoa', p2.Nome AS 'Amigo do amigo' FROM Amizade a1 JOIN Pessoa p1 ON a1.IdPessoa = p1.Id JOIN Amizade a2 ON a2.IdPessoa = a1.IdAmigo JOIN Pessoa p2 ON a2.IdAmigo = p2.Id WHERE p1.Nome = 'Lucas' AND a2.IdAmigo <> p1.Id
  23. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo: Quem são os “amigos dos amigos” do Lucas? g.V().has("nome", "Lucas").out("AMIGO_DE").out("AMIGO_DE").values("nome")
  24. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Relacional x Grafo: Quem são os “amigos dos amigos” do Lucas? g.V().has('nome','Lucas').repeat(out("AMIGO_DE").simplePath()).emit(__.not(out(" AMIGO_DE").simplePath())).path().by("nome")
  25. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Banco de dados orientados grafos BRILHAM com dados conectados
  26. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Exemplos canônicos • Redes sociais • Sistemas de recomendação • Detecção de fraudes • Ciências biológicas • Operações de rede/TI • ...
  27. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Exemplos não tão comuns • ERP: Composição de produtos e sugestão de preços de venda • Sistemas para autorização de acesso • Sistemas de classificação baseados em árvores • Sistemas de formulários dinâmicos • Bots: Composição de árvores conversacionais • ...
  28. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Se você não conhece a profundidade dos seus dados, provavelmente deveria usar grafos!
  29. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Carregando dados em uma instância do Amazon Neptune: Games e Gamers https://github.com/aws-samples/amazon-neptune-samples/blob/master/gremlin/col laborative-filtering/README.md
  30. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Carregando dados em uma instância do Amazon Neptune • Arquivos CSV • S3 • IAM role • VPC Endpoint
  31. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Resumo • Neptune • Cloud9 • Gremlin server • Gremlin console • Gremlin.NET (para desenvolvimento com .NET) • Graph Explorer • Api’s para carga de dados
  32. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Referências • Marco Goldbarg e Elizabeth Goldbarg, Grafos: conceitos, algoritmos e aplicações • Joe Celko’s, Trees and Hierarchies in SQL for smarties • Ian Robinson, Jim Webber and Emil Eifrem, Graph Databases
  33. © 2018, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Obrigado! Marcelo Palladino Arquiteto de Software, Hi Platform @mfpalladino