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