NoSQL - Grafos
JAÇÃ VINICIUS SILVA REIS
Roteiro
 NoSQL
 Motivação
 Tipos
 Graph Database
 Conceitos
 Tipos de ferramentas atuais
 Neo4j
 Estrutura
 Cypher
 Hands-on
NoSQL
 Motivação
 Com a evolução número de usuários dispararam as aplicações
web e mobile

Grande quantidade de dados é coletada e armazenada de todo
o tipo de dado

Informações não estruturadas e semi estruturadas

Internet of Things, Big Data, and the Cloud, sistemas de tempo
real, SaaS
NoSQL
 Vantagens

Maior Escalabilidade / Escalabilidade Horizontal

Maior Velocidade [em algumas operações]

Simplificação do Projeto
NoSQL
 Tipos

Key/Value Store

Wide Columns Store

Document Store

Graph Store
Graph Database
 Conceitos

Entidades são armazenadas como nós

Relacionamento entre estas entidades como relacionamentos

Similar ao modelo ER, onde registros tem seus
relacionamentos
Graph Database
 Propriedades de um Graph Database

Armazenamento:
Armazenamento nativo
 Serializar os dados para armazena-los


Processamento:

Adjacência de índice livre (nós apontando fisicamente para outros)
Graph Database
Graph Database
Graph Database
 Vantagens
 Performance
Não é necessário gastar processamento com joins
 Desempenho tende a permanecer relativamente constante


Flexibilidade


Nós, relacionamentos e novos subgrafos podem ser adicionados
Agilidade
Graph Database
 Algumas Ferramentas
 Neo4j


FlockDB


Criado pelo Twitter para analise de relacionamentos
AllegroGraph


Mais popular e baseado em Java (suporte para Ruby e Python)
Construído sobre a especificação da W3C (Linked Data e Web
Semântica)
GraphDB

Construído em .NET
Neo4j
 Estrutura dos Dados
 Property Graph Model
Contém nós e relacionamentos
 Nós contém propriedades
 Relacionamentos com nomes e direcionados
 Relacionamentos podem conter propriedades


Labels nos nós
Neo4j
Neo4j
 Cypher

Uso de casamento de padrões

Cláusulas similares ao SQL

CREATE, WHERE, DELETE, UNION, etc
Neo4j
 Cypher

CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })

CREATE (ee:Person), (jj:Person), (ee)-[:KNOWS]->(jj), …

MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;

MATCH (ee:Person)-[:KNOWS]-(friends) WHERE ee.name = "Emil"
RETURN ee, friends

Funções mais avançadas

http://neo4j.com/docs/2.1.6/query-function.html
Neo4j
Hands-on!
Dúvidas
Download

NoSQL - Grafos