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