Slide 1

Slide 1 text

Graph Databases: Discutindo o Relacionamento dos seus Dados com Python Nicolle Cysneiros

Slide 2

Slide 2 text

Quem sou eu Fullstack Developer @ Labcodes Django | AngularJS Mestranda em Ciência da Computação na UFPE Análise BI em Banco de Dados em Grafo PUG-PE e PyLadies Recife

Slide 3

Slide 3 text

Labcodes Software studio de Recife para o mundo Tecnologias que trabalhamos Labcodes e Comunidade

Slide 4

Slide 4 text

Roteiro Relacionamentos Banco de Dados em Grafo Neo4J Comparando BDs em Grafo Neo4J vs Banco Relacional Aplicações

Slide 5

Slide 5 text

Relacionamentos

Slide 6

Slide 6 text

Relacionamentos

Slide 7

Slide 7 text

Uma rede social onde um usuário pode ser amigo de outro usuário ou curtir uma página, funcionando de forma similar ao Facebook. Representando relacionamentos CENÁRIO

Slide 8

Slide 8 text

Representando relacionamentos BANCO DE DADOS RELACIONAL Usuário ID Nome Gênero Idade 1 João M 28 2 Maria F 26 3 Francis F 31 Amigo ID_1 ID_2 1 2 2 3

Slide 9

Slide 9 text

Representando relacionamentos BANCO DE DADOS RELACIONAL Página ID Nome Categoria 1 Coca-cola Comida/Bebida 2 The Beatles Banda/Músico 3 Apple Tecnologia Curte ID_Usuario ID_Pagina 1 2 3 2 1 1 2 3

Slide 10

Slide 10 text

G = (V,E) Grafo é uma estrutura de dados G formada por um conjunto de vértices V e um conjunto E de pares de vértices (arestas) Representando relacionamentos GRAFOS

Slide 11

Slide 11 text

Representando relacionamentos GRAFOS

Slide 12

Slide 12 text

Banco de Dados em Grafo

Slide 13

Slide 13 text

Banco de Dados em Grafo É um sistema que armazena dados em estruturas de grafo, permitindo também o armazenamento explícito do relacionamento entre eles. Relacionamento Explícito Recuperação Direta da Informação

Slide 14

Slide 14 text

Permitem a realização de análises mais elaboradas dos dados, usando algoritmos conhecidos da área de Teoria dos Grafos. Detecção de Comunidade Reconhecimento de Padrões Medidas de Centralidade Banco de Dados em Grafo VANTAGENS

Slide 15

Slide 15 text

Banco de Dados em Grafo VANTAGENS

Slide 16

Slide 16 text

Melhoria de performance utilizando mecanismos de armazenamento baseado em sistemas NoSQL. Escalabilidade Horizontal Processamento Distribuído Banco de Dados em Grafo VANTAGENS

Slide 17

Slide 17 text

Neo4J

Slide 18

Slide 18 text

Neo4J Banco de Dados em Grafo nativo mais popular, de acordo com o DB Engines Implementado em Java Linguagem de consulta própria: Cypher Dados podem ser acessados a partir de uma API REST e uma API Java

Slide 19

Slide 19 text

Neo4J EXEMPLOS - CRIAR VÉRTICE (NODE)

Slide 20

Slide 20 text

CREATE (joao:User {name:"João", gender:"M", age:"28"}) RETURN joao

Slide 21

Slide 21 text

Neo4J EXEMPLOS - CRIAR VÉRTICE (NODE): Resultado

Slide 22

Slide 22 text

{ "results": [ {... "graph": { "nodes": [ { "id": "1", "labels": [ "User" ], "properties": { "gender": "M", "name": "João", "age": "28" } } ], "relationships": [] } }], ... }

Slide 23

Slide 23 text

Neo4J EXEMPLOS - CRIAR RELACIONAMENTO

Slide 24

Slide 24 text

MATCH (joao:User), (maria:User) WHERE joao.name="João" AND maria.name="Maria" CREATE (joao)-[f:FRIENDS_WITH]->(maria) RETURN joao, f, maria

Slide 25

Slide 25 text

Neo4J EXEMPLOS - CRIAR RELACIONAMENTO: Resultado

Slide 26

Slide 26 text

{ "results": [ {... "graph": { "nodes": [ { "id": "1", "labels": [ "User" ], "properties": { "gender": "M", "name": "João", "age": "28" }}, { "id": "2", "labels": [ "User" ], "properties": { "gender": "F", "name": "Maria", "age": "26" }} ], "relationships": [ { "id": "0", "type": "FRIENDS_WITH", "startNode": "1", "endNode": "2", "properties": {}} ] }}], ... }

Slide 27

Slide 27 text

Neo4J EXEMPLOS - BANCO COMPLETO

Slide 28

Slide 28 text

Neo4J EXEMPLOS - CONSULTA

Slide 29

Slide 29 text

MATCH (joao:User {name:"João"})-[l:LIKES]->(pages:Page) RETURN joao, l, pages

Slide 30

Slide 30 text

Neo4J EXEMPLOS - CONSULTA: Resultado

Slide 31

Slide 31 text

{ "results": [{ ... "data": [ {"row": [ { "gender": "M", "name": "João", "age": "28" }, {}, { "name": "The Beatles", "category": "Músico/Banda" } ], ... }, {"row": [ { "gender": "M", "name": "João", "age": "28" }, {}, { "name": "Coca-Cola", "category": "Comida/Bebida" } ], ...}], ...}

Slide 32

Slide 32 text

Módulo Python para trabalhar com Neo4J a partir de aplicações ou de linha de comando. Suporta Python 2 e 3 e garante suporte para distribuições CPython. Neo4J + Python Py2Neo

Slide 33

Slide 33 text

Neo4J + Python CRIAR VÉRTICES (NODES) E RELACIONAMENTOS

Slide 34

Slide 34 text

from py2neo import Graph, Node, Relationship g = Graph(password="admin") tx = g.begin() joao = Node("User", name="João", gender="M", age="28") tx.create(joao) maria = Node("User", name="Maria", gender="F", age="26") tx.create(maria) jm = Relationship(joao, "FRIENDS_WITH", maria) tx.create(jm) tx.commit()

Slide 35

Slide 35 text

Neo4J + Python CONSULTAR

Slide 36

Slide 36 text

from py2neo import Graph, Node, Relationship, NodeSelector g = Graph(password="admin") selector = NodeSelector(g) joao = selector.select("User", name="João").first() joao_likes = g.match(start_node=joao, rel_type="LIKES") for like in joao_likes: page = like.end_node() print(page) >>> (e0f611c:Page {category:"Músico/Banda",name:"The Beatles"}) (ac6964f:Page {category:"Comida/Bebida",name:"Coca-Cola"})

Slide 37

Slide 37 text

Comparando BDs em Grafo

Slide 38

Slide 38 text

Comparando BDs em Grafo Neo4J OrientDB TitanDB Grafo Nativo Multi-Model Grafo + Backend DB Java Java Java Cypher SQL Estendido Gremlin

Slide 39

Slide 39 text

Cypher - Neo4J SQL Extendido - OrientDB Gremlin - TitanDB Comparando BDs em Grafo MATCH (User {name: "João"}) -[:LIKES]-> (pages) RETURN pages SELECT EXPAND( BOTH('LIKES') ) FROM User WHERE name="João" g.V.has('name','João').out('LIKES')*.name

Slide 40

Slide 40 text

Comparando BDs em Grafo PERFORMANCE Font: http://bit.ly/1s2K0IN

Slide 41

Slide 41 text

Comparando BDs em Grafo PERFORMANCE Font: http://bit.ly/2cgrvAD

Slide 42

Slide 42 text

Neo4J vs Banco Relacional

Slide 43

Slide 43 text

Cypher - Neo4J SQL Neo4J vs Banco Relacional SELECT u.nome, u.genero, u.idade FROM Usuario u, Curte c, Pagina p WHERE p.nome = "The Beatles" AND p.ID = c.ID_Pagina AND c.ID_Usuario = u.ID MATCH (User {name: "João"}) -[:LIKES]-> (pages) RETURN pages

Slide 44

Slide 44 text

Neo4J vs Banco Relacional PERFORMANCE Font: http://www.cs.olemiss.edu/~ychen/publications/conference/vicknair_acmse10.pdf

Slide 45

Slide 45 text

Aplicações

Slide 46

Slide 46 text

Existem muitas áreas onde a utilização de Banco de Dados em Grafos se torna importante, como: Redes Sociais Bioinformática Análise Genética Telecomunicações Aplicações

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

Graph of Thrones Andrew Beveridge e Jie Shan analisaram uma rede formada pelos personagens do livro “Tormenta das Espadas”. William Lyon importou esses dados para o Neo4J. Source Target Weight Aemon Grenn 5 Lemon Samwell 31 Aerys Jaime 18 Font: http://www.lyonwj.com/2016/06/26/graph-of-thrones-neo4j-social-network-analysis/

Slide 49

Slide 49 text

É um módulo Python que permite a manipulação de grafo usando algoritmos conhecidos, como centralidade e detecção de comunidades Trabalhando com Python iGraph

Slide 50

Slide 50 text

Trabalhando com Python iGraph + Neo4J - Detecção de Comunidade

Slide 51

Slide 51 text

from py2neo import Graph from igraph import Graph as IGraph graph = Graph() query = ''' MATCH (c1:Character)-[r:INTERACTS]->(c2:Character) RETURN c1.name, c2.name, r.weight AS weight ''' ig = IGraph.TupleList(graph.run(query), weights=True) clusters = IGraph.community_walktrap( ig, weights="weight" ).as_clustering()

Slide 52

Slide 52 text

Trabalhando com Python iGraph + Neo4J - Detecção de Comunidade cluster members 0 [Aemon, Alliser, Craster, Eddison, Gilly, Janos, Jon, Mance, Rattleshirt, Samwell, Val, Ygritte, Grenn, Karl, Bowen, …] 1 [Aerys, Amory, Balon, Brienne, Bronn, Cersei, Gregor, Jaime, Joffrey, Jon Arryn, Kevan, Loras, Lysa, Meryn, Myrcella, Oberyn,…] 2 [Arya, Beric, Eddard, Gendry, Sandor, Anguy, Thoros] 3 [Brynden, Catelyn, Edmure, Hoster, Lothar, Rickard, Robb, Roose, Walder, Jeyne, Roslin, Ramsay] 4 [Bran, Hodor, Jojen, Luwin, Meera, Rickon, Nan, Theon] 5 [Belwas, Daario, Daenerys, Irri, Jorah, Missandei, Rhaegar, Viserys, Barristan, Illyrio, Drogo, Aegon, Kraznys, Rakharo, Worm] 6 [Davos, Melisandre, Shireen, Stannis, Cressen, Salladhor] 7 [Lancel]

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

Dúvidas? www.labcodes.com.br speakerdeck.com/labcodes github.com/nicysneiros twitter.com/nicysneiros

Slide 55

Slide 55 text

No content