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.
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.
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
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)
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)
rights reserved. Aresta/relacionamento: “cidadão de primeira classe” Aresta Relacionamento (contém direção, semântica, pode ter propriedades) Vértice Vértice
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
rights reserved. Gremlin: mais alguns steps úteis • Group ◦ By • Count • Drop • Explain • ... http://tinkerpop.apache.org/docs/3.3.3/reference/#graph-traversal-steps
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
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'
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'
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()
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
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")
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")
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 • ...
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
rights reserved. Resumo • Neptune • Cloud9 • Gremlin server • Gremlin console • Gremlin.NET (para desenvolvimento com .NET) • Graph Explorer • Api’s para carga de dados
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