neo4j - rede de relacionamentos baseada em grafos

Post on 21-Jun-2015

686 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Apresentação que demonstra a origem da teoria de grafo e apresenta a mesma através do Neo4j, onde criamos uma rede de relacionamentos de uma família do Zero utilizando Cypher como linguagem principal.

TRANSCRIPT

evandro.venancio@gmail.com @evenancio evenancio.wordpress.com linkedin.com/in/evandrovenancio

O que é um Grafo ???

Vértice = NóArco = Relacionamento

Vértice A Vértice B

arco

Santos Rodovia dos Imigrantes

São Bernardo do Campo

Rodovia dos Imigrantes

São Paulo

Santos São Bernardo do

Campo

São Paulo

[:imigrantes]

[:imigr

antes]

As pontes de Königsberg

1736Leonhard Euler

#Big Data tools

#Data Center and Cloud Software

#Technology of the Year

SOME FEATURES• Totalmente Transacional (ACID)• Tem controle de concorrência• Armazenamento próprio baseado em discos• Escalável para múltiplas máquinas• Possui uma linguagem intuitiva (Cypher)• Possui interface RESTFul• Possui API nativa em Java• Pode ser distribuído como um servidor Standalone• Pode ser embutido na aplicação

Let’s to play ???

#The Smith Family lab#

John Smithour hero

Dad Mom

bastardbro

sister

beautifulwife

my children

my cousin

CYPHER – Creating the Smith family -> 11 nodes

CREATE (dad:People {name:"Joseph Smith", datebirth: 1961 })CREATE (mom:People {name:"Joan Smith", datebirth: 1963 })CREATE (me:People {name:"John Smith", datebirth: 1982 })CREATE (sister:People {name:"Josephine Smith", datebirth: 1986 })CREATE (bro:People {name:"Jonathan Smith", datebirth: 1994 })CREATE (wife:People {name:"Jennifer K. L. Smith", datebirth: 1984 })CREATE (children1:People {name:"Jen-El Smith", datebirth: 2005 })CREATE (children2:People {name:"Jil-El Smith", datebirth: 2007 })CREATE (children3:People {name:"Juju-El Smith", datebirth: 2011 })CREATE (children4:People {name:"Jor-El Smith", datebirth: 2013 })CREATE (cousin:People {name:"Cousine Smith Oliver", datebirth: 2013 })

CYPHER – Creating the basic relationship between the Smiths 1/2

MATCH (dad:People {name:"Joseph Smith" })MATCH (mom:People {name:"Joan Smith" })MATCH (me:People {name:"John Smith" })MATCH (sister:People {name:"Josephine Smith" })MATCH (bro:People {name:"Jonathan Smith" })CREATE (me)-[:IS_SON_OF]->(dad)CREATE (me)-[:IS_SON_OF]->(mom)CREATE (sister)-[:IS_SON_OF]->(dad)CREATE (sister)-[:IS_SON_OF]->(mom)CREATE (bro)-[:IS_SON_OF]->(dad)

CYPHER – Creating the basic relationship between the Smiths 2/2

MATCH (sister:People {name:"Josephine Smith" })MATCH (cousin:People {name:"Cousine Smith Oliver" })MATCH (me:People {name:"John Smith" })MATCH (wife:People {name:"Jennifer K. L. Smith" })MATCH (children1:People {name:"Jen-El Smith" })MATCH (children2:People {name:"Jil-El Smith" })MATCH (children3:People {name:"Juju-El Smith" })MATCH (children4:People {name:"Jor-El Smith" })CREATE (cousin)-[:IS_SON_OF]->(sister)CREATE (me)-[:IS_MARRIED_WITH]->(wife)CREATE (children1)-[:IS_SON_OF]->(me)CREATE (children2)-[:IS_SON_OF]->(me)CREATE (children2)-[:IS_SON_OF]->(wife)CREATE (children3)-[:IS_SON_OF]->(me)CREATE (children3)-[:IS_SON_OF]->(wife)CREATE (children4)-[:IS_SON_OF]->(me)CREATE (children4)-[:IS_SON_OF]->(wife)

SOME QUESTIONS!!!1) Quem são os pais de John Smith?MATCH (me:People {name:"John Smith" })MATCH (me)-[:IS_SON_OF]->(parents)RETURN parents.name

2) Quem são os filhos de John Smith?MATCH (me:People {name:"John Smith" })MATCH (me)<-[:IS_SON_OF]-(children)RETURN children.name

3) Quem são os irmãos de John Smith?MATCH (me:People {name:"John Smith" })MATCH (me)-[:IS_SON_OF]->(parents)<-[:IS_SON_OF]-(brothers)RETURN DISTINCT brothers.name

4) Quem são os irmãos de John Smith do mesmo pai e da mesma mãe?MATCH (me:People {name:"John Smith" })MATCH (me)-[:IS_SON_OF]->(parents)<-[:IS_SON_OF]-(brothers)WITH me, brothers, count(parents) as parents_countWHERE parents_count = length(me-[:IS_SON_OF]->())RETURN brothers.name

5) Quem são os primos de Cousine?

MATCH (cousin:People {name:"Cousine Smith Oliver" })MATCH (cousin)-[:IS_SON_OF]->(mysister)MATCH (mysister)-[:IS_SON_OF]->(ourparents)<-[:IS_SON_OF]-(brothers_of_my_sister)MATCH (brothers_of_my_sister)<-[:IS_SON_OF]-(sons_of_brothers_of_my_sister)RETURN DISTINCT sons_of_brothers_of_my_sister.name

Para finalizar, vamos deixar um pouco mais complexo!

6) Quem são os primos de Cousine que torcem para o Chelsea?

6.1 – Creating NodesMATCH (children1:People {name:"Jen-El Smith" })MATCH (children4:People {name:"Jor-El Smith” })CREATE (chelsea:SoccerTeam { name: “Chelsea”})CREATE (children1)-[:IS_FAN_OF]->(chelsea)CREATE (children4)-[:IS_FAN_OF]->(chelsea)

6.2 - QueryMATCH (cousin:People {name:"Cousine Smith Oliver" })MATCH (cousin)-[:IS_SON_OF]->(mysister)MATCH (mysister)-[:IS_SON_OF]->(ourparents)<-[:IS_SON_OF]-(brothers_of_my_sister)MATCH (brothers_of_my_sister)<-[:IS_SON_OF]-(sons_of_brothers_of_my_sister)MATCH (sons_of_brothers_of_my_sister)-[:IS_FAN_OF]->(soccer_team)WHERE soccer_team.name = "Chelsea"

evandro.venancio@gmail.com @evenancio evenancio.wordpress.com linkedin.com/in/evandrovenancio

top related