Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito)...

90
Grafos com Neo4j: Grafos com Neo4j: de hidrelétricas a de hidrelétricas a eletrônicos eletrônicos #qconsp @hannelita

Transcript of Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito)...

Page 1: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Grafos com Neo4j:Grafos com Neo4j:de hidrelétricas ade hidrelétricas a

eletrônicoseletrônicos

#qconsp @hannelita

Page 2: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Olá!Olá!EngenhariaProgramaçãoEletrônicaMatemáticaFísicaLegoMeetupsCaféGIFs

#qconsp @hannelita

Page 3: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

DisclaimerDisclaimerEste conteúdo representa a opinião eEste conteúdo representa a opinião e

vivência pessoais da palestrante.vivência pessoais da palestrante.

Feedback (para concordar ou não)Feedback (para concordar ou não)aceito em [email protected] em [email protected]

Nem todos os dados numéricos ouNem todos os dados numéricos ounomes são verdadeiros, a fim de nãonomes são verdadeiros, a fim de não

comprometer sigilo empresarialcomprometer sigilo empresarial

Todos os dados de modelagem sãoTodos os dados de modelagem sãoreais. Desculpem o possível linguajarreais. Desculpem o possível linguajar

muito técnico.muito técnico.

Page 4: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Estrutura - CasesEstrutura - Cases

Contextualização do caso de usoTentativa de modelagem relacional (e falhas)Modelagem com grafosEvolução do modeloEpic fails

ConclusãoConclusãoBenefíciosFerramentas de Apoio

#qconsp @hannelita

Page 5: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Title TextTitle Text

Page 6: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Já ficou no escuro?Já ficou no escuro?

Page 7: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Faltou energiaFaltou energiaelétrica?elétrica?

Page 8: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

À luz de velas <3À luz de velas <3

Page 9: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

O Brasil é um grandeO Brasil é um grandeprodutor de energiaprodutor de energia

elétrica.elétrica.

#qconsp @hannelita

Page 10: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Especialmente aEspecialmente apartir de usinaspartir de usinas

hidrelétricashidrelétricas

#qconsp @hannelita

Page 11: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 1 -Caso 1 -ContextualizaçãoContextualização

#qconsp @hannelita

Page 12: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Como se dá a distribuição de energiaelétrica? E a distribuição de usinas?

#qconsp @hannelita

Page 13: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

http://sigel.aneel.gov.br/sigel.html

Acessado em 28/3/2016

Page 14: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

http://sigel.aneel.gov.br/sigel.html

Acessado em 28/3/2016

Page 15: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

3

Algumas informações Algumas informações contidascontidas nessenessemapamapa

Localização da usina

Linhas de transmissão

Capacidade de fornecimento

Capacidade da usina

Cidades próximas

Distribuição

Fronteiras estaduais

Bacia hidrográfica

Concessões

Elétrica

Política

AmbientalEconômico

#qconsp @hannelita

Page 16: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

DesafioDesafioConstruir um sistema queConstruir um sistema que

armazene essasarmazene essasinformações e como elas seinformações e como elas se

relacionamrelacionam

#qconsp @hannelita

Page 17: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 1 - Tentativa deCaso 1 - Tentativa demodelagem commodelagem combanco de dadosbanco de dados

relacionalrelacional#qconsp @hannelita

Page 18: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1 1

1 1

Elétrica Política

Ambiental Econômico

CREATE TABLE usina; CREATE TABLE cidade;

CREATE TABLEregiao_hidrografica;

CREATE TABLEcencessionaria;

Page 19: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

Pergunta 1:Pergunta 1:Como representar umaComo representar umavizinhança de usinas?vizinhança de usinas?

Auto-relacionamento;Denormalizar (usinas_vizinhas_ids)

#qconsp @hannelita

Page 20: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

1

Pergunta 2:Pergunta 2:Como identificar facilmente qual usinaComo identificar facilmente qual usinadeve atender a uma região específica?deve atender a uma região específica?

id consumo(mensal, emMwh)

populacao(em milhões)

coordenada

1 40 13

2 11 2

cidade

id Capacidade (Mwh)

linha detransmissão(PK)

coordenada

1 95 22

2 11 1

usina

1. Dado umconjunto decoordenadas,somar apopulação dopolígonoresultante

#qconsp @hannelita

Page 21: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

1

Pergunta 2:Pergunta 2:Como identificar facilmente qual usinaComo identificar facilmente qual usinadeve atender a uma região específica?deve atender a uma região específica?

id consumo(mensal, emMwh)

populacao(em milhões)

coordenada

1 40 13

2 11 2

cidade

id Capacidade (Mwh)

linha detransmissão(PK)

coordenada

1 95 22

2 11 1

usina

2. Aproximarcoordenadas das

usinas maispróximas baseado-se na capacidade

#qconsp @hannelita

Page 22: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

1

2

Pergunta 2:Pergunta 2:Como identificar facilmente qual usinaComo identificar facilmente qual usinadeve atender a uma região específica?deve atender a uma região específica?

id consumo(mensal, emMwh)

populacao(em milhões)

coordenada

1 40 13

2 11 2

cidade

id Capacidade (Mwh)

linha detransmissão(PK)

coordenada

1 95 22

2 11 1

usina

3. Verificar ascaracterísticas na

tabela delinhas_de_transmissao

#qconsp @hannelita

Page 23: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Não é tãoNão é tãocomplicado assim...complicado assim...

#qconsp @hannelita

Page 24: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Mas não acabou! Mas não acabou!

#qconsp @hannelita

Page 25: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

1

2

Pergunta 2:Pergunta 2:Como identificar facilmente qual usinaComo identificar facilmente qual usinadeve atender a uma região específica?deve atender a uma região específica?

id consumo(mensal, emMwh)

populacao(em milhões)

coordenada

1 40 13

2 11 2

cidade

id Capacidade (Mwh)

linha detransmissão(PK)

coordenada

1 95 22

2 11 1

usina

4. Verificar se háindústrias nas

proximidades dascidades

#qconsp @hannelita

Page 26: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

1

2

Pergunta 2:Pergunta 2:Como identificar facilmente qual usinaComo identificar facilmente qual usinadeve atender a uma região específica?deve atender a uma região específica?

id consumo(mensal, emMwh)

populacao(em milhões)

coordenada

1 40 13

2 11 2

cidade

id Capacidade (Mwh)

linha detransmissão(PK)

coordenada

1 95 22

2 11 1

usina

5. Verificar IDH dacidade.

#qconsp @hannelita

Page 27: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

1

2

Pergunta 2:Pergunta 2:Como identificar facilmente qual usinaComo identificar facilmente qual usinadeve atender a uma região específica?deve atender a uma região específica?

id consumo(mensal, emMwh)

populacao(em milhões)

coordenada

1 40 13

2 11 2

cidade

id Capacidade (Mwh)

linha detransmissão(PK)

coordenada

1 95 22

2 11 1

usina

6. Verificar interesse daconcessionária

#qconsp @hannelita

Page 28: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

1

2

Pergunta 2:Pergunta 2:Como identificar facilmente qual usinaComo identificar facilmente qual usinadeve atender a uma região específica?deve atender a uma região específica?

id consumo(mensal, emMwh)

populacao(em milhões)

coordenada

1 40 13

2 11 2

cidade

id Capacidade (Mwh)

linha detransmissão(PK)

coordenada

1 95 22

2 11 1

usina

7. Verificar se regiãopode ser abastecida

por energia de outrasfontes

#qconsp @hannelita

Page 29: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

1

2

Pergunta 2:Pergunta 2:Como identificar facilmente qual usinaComo identificar facilmente qual usinadeve atender a uma região específica?deve atender a uma região específica?

id consumo(mensal, emMwh)

populacao(em milhões)

coordenada

1 40 13

2 11 2

cidade

id Capacidade (Mwh)

linha detransmissão(PK)

coordenada

1 95 22

2 11 1

usina

7. Verificar se regiãopode ser abastecida

por energia de outrasfontes

#qconsp @hannelita

Page 30: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

#qconsp @hannelita

Page 31: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Pergunta 3:Pergunta 3:Sabendo que as usinas operam comoSabendo que as usinas operam como

um "grande cabo-de-guerra deum "grande cabo-de-guerra demúltiplas pontas", como determinar amúltiplas pontas", como determinar aredistribuição de cargas se uma usinaredistribuição de cargas se uma usina

cair?cair?

#qconsp @hannelita

Page 32: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Pergunta 3:Pergunta 3:Sabendo que as usinas operam comoSabendo que as usinas operam como

um "grande cabo-de-guerra deum "grande cabo-de-guerra demúltiplas pontas", como determinar amúltiplas pontas", como determinar aredistribuição de cargas se uma usinaredistribuição de cargas se uma usina

cair?cair?

#qconsp @hannelita

Page 33: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Talvez tabelas não sejam as melhoresestruturas para representar informações

sobre distribuição de eletricidade

#qconsp @hannelita

Page 34: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Neo4j chega paraNeo4j chega pararesolver! resolver!

#qconsp @hannelita

Page 35: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Introdução relâmpago aoIntrodução relâmpago aoNeo4jNeo4j

Banco orientado a grafosACIDEstruturas de Node, Relationship, Index e LabelMantido pela Neo TechnologyOpen SourceComunidade ativa

#qconsp @hannelita

Page 36: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 1 - ModelagemCaso 1 - Modelagemcom grafoscom grafos

#qconsp @hannelita

Page 37: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Passo 1 - Unisas sePasso 1 - Unisas setornam nóstornam nós

#qconsp @hannelita

Page 38: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Powered by Arrows - http://www.apcjones.com/arrows/#

CREATE (n:Usina:Hidreletrica { name : 'Itaipu', capacidade :'14000' })

#qconsp @hannelita

Page 39: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

3

Passo 2 - Cidades sePasso 2 - Cidades setornam nóstornam nós

#qconsp @hannelita

Page 40: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

3

Passo 3 - Linhas dePasso 3 - Linhas detransmissão setransmissão se

tornamtornamrelacionamentos! relacionamentos!

#qconsp @hannelita

Page 41: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Itaipu - IvaiporãItaipu - Ivaiporã

#qconsp @hannelita

Page 42: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

MATCH (a:Hidreletrica),(b:Cidade)WHERE a.name = 'Itaipu' AND b.name = 'Ivaipora'

CREATE (a)-[r:FORNECE { capacidade_cabo : 765, rl : 330 }]->(b)

#qconsp @hannelita

Page 43: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

MúltiplosMúltiplosrelacionamentosrelacionamentos

para diversas linhaspara diversas linhas

#qconsp @hannelita

Page 44: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

MATCH (a:Hidreletrica),(b:Cidade) WHERE a.name = 'Itaipu' AND b.name = 'Cascavel Oeste' CREATE (a)-[r:FORNECE { capacidade_cabo : 500 }]->(b)

MATCH (a:Cidade),(b:Cidade) WHERE a.name = 'Ivaipora' AND b.name = 'Cascavel Oeste' CREATE (a)-[r:MALHA { capacidade_cabo : 500 }]->(b)

#qconsp @hannelita

Page 45: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

3

Passo 4 -Passo 4 -Concessionárias seConcessionárias se

tornam nós tornam nós

#qconsp @hannelita

Page 46: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

CREATE (n:Concessionaria { name : 'Ficticio', porcentagem : 85, margem : 72 })

MATCH (a:Concessionaria),(b:Cidade) WHERE a.name = 'Ficticio' AND b.name = 'Cascavel Oeste' CREATE (a)-[r:ATENDE]->(b)

MATCH (a:Concessionaria),(b:Usina) WHERE a.name = 'Ficticio' AND b.name = 'Ita' CREATE (a)-[r:POSSUI]->(b)

#qconsp @hannelita

Page 47: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

3

Passo 5 - QueriesPasso 5 - Queriespoderosas poderosas MATCH (n:Usina {capacidade : 14000}),

(c:Cidade {name : 'Sao Paulo'})p = shortestPath((n)-[]-(c)) RETURN p

Queries para determinar otimização deabastecimento através de caminho

mínimo

#qconsp @hannelita

Page 48: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 1 - Evolução doCaso 1 - Evolução domodelomodelo

#qconsp @hannelita

Page 49: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Muito importante:Muito importante:Index nasIndex nas

propriedades maispropriedades maisutilizadasutilizadas

Capacidade, populacao, coordenadas

#qconsp @hannelita

Page 50: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Muito importante[2]:Muito importante[2]:LabelsLabels

:Cidade, :Metropole, :Industrial,:Hidreletrica, :Eolica, :Privada

Em geral, elementos agrupáveis merecemuma Label.

#qconsp @hannelita

Page 51: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Evolução -Evolução -Transformar outrosTransformar outroselementos elétricoselementos elétricos

em nósem nós

#qconsp @hannelita

Page 52: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

CREATE (n:Componente:Transformador { tag : 'F. Iguacu', tipo : 'Terciario', mva : 1650, total : 4 })

MATCH (a:Transformador),(b:Usina) WHERE a.tag = 'F. Iguacu' AND b.name = 'Itaipu' CREATE (a)-[r:INSTALADO]->(b)

#qconsp @hannelita

Page 53: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

O Neo4j é bemO Neo4j é bemflexível paraflexível paraevoluirmos oevoluirmos o

modelomodelo

#qconsp @hannelita

Page 54: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 1 - Epic FailsCaso 1 - Epic Fails

#qconsp @hannelita

Page 55: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Muitos nós paraMuitos nós paracidades - não eracidades - não era

necessário ter um nónecessário ter um nópara cada cidadepara cada cidade

ProblemaProblema

#qconsp @hannelita

Page 56: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Muita informaçãoMuita informaçãocarregada nocarregada no

MATCH; queriesMATCH; querieslentaslentas

ImpactoImpacto

#qconsp @hannelita

Page 57: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Deixar as :CidadesDeixar as :Cidadesmais relevantes emais relevantes e

criar :Regiao; excluircriar :Regiao; excluircidadescidades

inexpressivasinexpressivas

SoluçãoSolução

#qconsp @hannelita

Page 58: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Não declarar todasNão declarar todasas operações numas operações num

arquivo paraarquivo parareplicação.replicação.

ProblemaProblema

#qconsp @hannelita

Page 59: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Problemas comProblemas combackup / replicação. backup / replicação.

ImpactoImpacto

#qconsp @hannelita

Page 60: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Não rodar CREATENão rodar CREATEna interface Web! na interface Web!

Adicionar queries em um repositório Git- https://github.com/hannelita/qconsp

SoluçãoSolução

#qconsp @hannelita

Page 61: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 1 - Extra - "OCaso 1 - Extra - "Opulo do gato"pulo do gato"

#qconsp @hannelita

Page 62: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

EncontrarEncontrarinformaçõesinformações

que passaram que passaram despercebidas fazdespercebidas faztoda a diferençatoda a diferença

#qconsp @hannelita

Page 63: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Mapear osMapear oscomponentes emcomponentes em

nós, por exemplo, foinós, por exemplo, foisignificativosignificativo

#qconsp @hannelita

Page 64: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

MapearMapearComponentes...Componentes...

#qconsp @hannelita

Page 65: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 2 -Caso 2 -ContextualizaçãoContextualização

#qconsp @hannelita

Page 66: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

A-HA! Nós podemosA-HA! Nós podemosusar grafos para [...]usar grafos para [...]

(complete)(complete)

#qconsp @hannelita

Page 67: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Roteamento daRoteamento daplaca / traçar asplaca / traçar as

trilhas.trilhas.

#qconsp @hannelita

Page 68: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Sim! Mas podemos irSim! Mas podemos iralém.além.

Vamos analisar eVamos analisar earmazenar o layoutarmazenar o layout

das placas e dosdas placas e doscomponentes.componentes.

#qconsp @hannelita

Page 69: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 2 - Tentativa deCaso 2 - Tentativa demodelagemmodelagem

relacionalrelacional

#qconsp @hannelita

Page 70: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

11

1 1

Componente Trilha

Sensor Layer

CREATE TABLEcomponente;

CREATE TABLE trilha;

CREATE TABLE sensor; CREATE TABLE layer;

Page 71: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Pergunta 1Pergunta 1Um sensor capta elevaçãoUm sensor capta elevação

de temperatura. Comode temperatura. Comoinferir se é problema doinferir se é problema do

componente ou da trilha?componente ou da trilha?

#qconsp @hannelita

Page 72: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

Pergunta 1Pergunta 1É preciso consultar outrosÉ preciso consultar outrossensores, geralmente ossensores, geralmente ossensores vizinhos. Comosensores vizinhos. Comoexpressar isso na tabela?expressar isso na tabela?

Auto-relacionamento;Denormalizar (sensores_vizinhos_ids)

Déjà vu!

#qconsp @hannelita

Page 73: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Pergunta 2Pergunta 2Qual a trilha que afeta maisQual a trilha que afeta mais

componentes?componentes?

#qconsp @hannelita

Page 74: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Pergunta 3Pergunta 3Será que consigo extrairSerá que consigo extrairalguma informação extraalguma informação extra

do circuitodo circuito

representando-o numrepresentando-o numgrafo?grafo?

#qconsp @hannelita

Page 75: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 2 - ModelagemCaso 2 - Modelagemcom Grafoscom Grafos

#qconsp @hannelita

Page 76: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Passo 1:Passo 1:Componentes emComponentes em

nodesnodesCREATE (n:Componente:Primario { name : 'R1', tipo : 'resistor', valor : '10K' })

CREATE (n:Componente:Primario { name : 'C1', tipo : 'capacitor', grupo : 'poliester', valor : '100p' })

CREATE (n:Componente:CI { name : 'CI1', tipo : 'LM741', fabricante : 'Texas' })

#qconsp @hannelita

Page 77: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Passo 2: MapearPasso 2: Mapeartrilhas emtrilhas em

relacionamentosrelacionamentos

MATCH (a:Primario),(c:CI) WHERE a.name = 'R1' AND c.name = 'CI1' CREATE (a)-[r:TRILHA { espessura : 2, dilatacao : 0.5 }]->(c)

#qconsp @hannelita

Page 78: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Passo 3: MapearPasso 3: MapearLayers em LabelsLayers em Labels

CREATE (n:Componente:Primario:LAYER1 { name : 'R1', tipo : 'resistor', valor : '10K' })

CREATE (n:Componente:Primario:LAYER2 { name : 'C1', tipo : 'capacitor', grupo : 'poliester', valor : '100p' })

CREATE (n:Componente:CI:LAYER1 { name : 'CI1', tipo : 'LM741', fabricante : 'Texas' })

Fácil de recuperar todos os componentesde uma Layer e suas trilhas

#qconsp @hannelita

Page 79: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 2 - Evolução doCaso 2 - Evolução domodelomodelo

#qconsp @hannelita

Page 80: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Passo 4: Mapear osPasso 4: Mapear osSensores em NodesSensores em Nodes

CREATE (n:Sensor:LAYER1 { name : 'SS1', tipo : 'luz'})

CREATE (n:Sensor:LAYER2 { name : 'SS2', tipo : 'temperatura' })

MATCH (a:Primario),(s:Sensor) WHERE a.name = 'R1' AND c.name = 'SS1' CREATE (s)-[r:MONITORA { luz : 2 }]->(a)

MATCH (a:Primario),(s:Sensor) WHERE a.name = 'R1' AND c.name = 'SS2' CREATE (s)-[r:MONITORA { temperatura : 37 }]->(a)

#qconsp @hannelita

Page 81: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

MATCH (n:Sensor)-[r:MONITORA]-(c:Componente)WHERE n.temperatura > 60RETURN c.name, r.dilatacao

Decidir se é o componente que está comproblemas ou se é a trilha.

Passo 5: Rodar periodicamente a seguintequery

#qconsp @hannelita

Page 82: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Caso 2 - Epic FailsCaso 2 - Epic Fails

#qconsp @hannelita

Page 83: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Muitos updates dosMuitos updates dossensores. O Neo4jsensores. O Neo4j

tem algumastem algumaslimitações paralimitações para

write.write.

ProblemaProblema

#qconsp @hannelita

Page 84: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

PerformancePerformancecomprometida e altocomprometida e alto

consumo de RAM.consumo de RAM.

ImpactoImpacto

#qconsp @hannelita

Page 85: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Remover os nós deRemover os nós dealguns sensores ou iralguns sensores ou irmigrar para a versãomigrar para a versão

Enterprise.Enterprise.

SoluçãoSolução

#qconsp @hannelita

Page 86: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

Chegando ao Chegando ao fimfim!!

Modelos com flexibilidadeIdentificar relações ocultasFácil de iniciar os trabalhosProduto ativo e comunidade fortePode ser útil em muitos cenários, muito além deredes sociais ou sistemas de recomendação

#qconsp @hannelita

Page 87: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

1

Ferramentas de ApoioFerramentas de Apoio

(Bancos Relacionais, MongoDB,Cassandra, JSON, CSV)Ferramentas de visualizaçãoREST API no Neo4j

Importação de dados

#qconsp @hannelita

Page 89: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

2

2

AgradecimentosAgradecimentosNeo Technology, @lyonwj, @ryguyrg e @mesirii B.C., pelo excelente feedback e review@Codeminer42

#qconsp @hannelita

Prof. Maurílio e Justino, por sempre me incentivarem.

Page 90: Grafos com Neo4j: de hidrelétricas a · 2016-08-26 · Neo4j Slack Users Neo4j Training (Gratuito) Arrows #qconsp @hannelita. 2 2 Agradecimentos Neo Technology, @lyonwj, @ryguyrg

Obrigada :)Obrigada :)Perguntas? [email protected]@hannelita

#qconsp @hannelita