Modelagem de dados em grafos para uma plataforma de streaming utilizando Neo4j e Cypher.
O Streaming Graph Model é um projeto de modelagem de dados orientada a grafos desenvolvido para representar o domínio de uma plataforma de streaming.
A solução utiliza Neo4j e Cypher para estruturar entidades e relacionamentos entre:
- usuários;
- filmes;
- séries;
- gêneros;
- atores;
- diretores.
O objetivo é demonstrar como bancos de dados em grafos podem representar de forma natural relações complexas existentes em plataformas de conteúdo digital.
Construir um modelo capaz de representar as principais entidades e conexões de um serviço de streaming e permitir consultas orientadas a relacionamentos.
O projeto trabalha conceitos como:
- Graph Databases
- Neo4j
- Cypher Query Language
- NoSQL
- Data Modeling
- Graph Data Modeling
- Nós e relacionamentos
- Propriedades
- Constraints
- Integridade de dados
- Consultas em grafos
- Fundamentos de Recommendation Systems
Plataformas de streaming são altamente relacionais.
Um mesmo conteúdo pode estar conectado a:
- usuários;
- gêneros;
- atores;
- diretores;
- avaliações;
- outros conteúdos.
Em um banco relacional tradicional, diversas análises podem exigir múltiplos JOINs.
Em um banco de grafos, os relacionamentos fazem parte diretamente do modelo.
Exemplo:
Usuário
↓
WATCHED
↓
Filme
↓
IN_GENRE
↓
Gênero
Isso facilita a navegação entre entidades e torna análises relacionais mais intuitivas.
O grafo utiliza seis tipos principais de nós:
| Nó | Representação |
|---|---|
User |
Usuários da plataforma |
Movie |
Filmes disponíveis |
Series |
Séries disponíveis |
Genre |
Gêneros dos conteúdos |
Actor |
Atores e atrizes |
Director |
Diretores |
O modelo utiliza relacionamentos como:
| Relacionamento | Significado |
|---|---|
WATCHED |
Usuário assistiu determinado conteúdo |
ACTED_IN |
Ator participou de filme ou série |
DIRECTED |
Diretor dirigiu determinado conteúdo |
IN_GENRE |
Conteúdo pertence a determinado gênero |
O relacionamento WATCHED também pode armazenar propriedades, como avaliações atribuídas pelos usuários.
O diagrama apresenta visualmente as entidades e os relacionamentos utilizados na modelagem.
O modelo é populado com dados de exemplo para permitir a execução das consultas.
| Entidade | Quantidade |
|---|---|
| Usuários | 10 |
| Filmes | 6 |
| Séries | 4 |
| Gêneros | 6 |
| Atores | 8 |
| Diretores | 5 |
Total de nós: 39
Relacionamentos: 44
Esses dados têm finalidade didática e demonstrativa.
O modelo utiliza constraints para garantir unicidade dos identificadores das principais entidades.
Exemplo conceitual:
User → userId
Movie → movieId
Series → seriesId
Genre → genreId
Isso ajuda a:
- evitar registros duplicados;
- manter consistência;
- melhorar a confiabilidade do grafo.
A estrutura completa do banco está em:
Esse arquivo contém a criação de:
- constraints;
- nós;
- propriedades;
- relacionamentos;
- dados demonstrativos.
As consultas analíticas estão em:
Elas permitem explorar conceitos como:
- navegação entre nós;
- filtros;
- relacionamentos;
- agregações;
- padrões;
- preferências;
- conteúdos relacionados;
- recomendações baseadas em conexões.
Uma das aplicações mais interessantes desse tipo de modelagem é a recomendação de conteúdo.
Um fluxo conceitual pode ser representado por:
Usuário
↓
Conteúdos Assistidos
↓
Gêneros Preferidos
↓
Usuários com Comportamento Semelhante
↓
Outros Conteúdos
↓
Recomendação
A estrutura em grafo permite percorrer essas conexões com maior naturalidade.
Este projeto demonstra os fundamentos de modelagem necessários para que algoritmos mais avançados de recomendação sejam incorporados posteriormente.
Definição do Domínio
↓
Entidades
↓
Relacionamentos
↓
Constraints
↓
Dados de Exemplo
↓
Neo4j
↓
Consultas Cypher
↓
Análise das Conexões
↓
Possibilidades de Recomendação
| Tecnologia | Uso |
|---|---|
| Neo4j | Banco de dados orientado a grafos |
| Cypher | Criação e consulta do grafo |
| Arrows | Modelagem visual |
| Git | Versionamento |
| GitHub | Repositório e documentação |
Streaming-Graph-Model/
│
├── Assets/
│ └── streaming-graph-model.png
│
├── Cypher/
│ ├── modelo.cypher
│ └── consultas.cypher
│
└── README.md
git clone https://github.com/MCLG1661/Streaming-Graph-Model.git
cd Streaming-Graph-ModelUtilize uma instância compatível do Neo4j.
Execute o conteúdo de:
Cypher/modelo.cypher
Isso criará a estrutura do grafo e os dados demonstrativos.
Depois, utilize:
Cypher/consultas.cypher
para explorar os dados e relacionamentos.
- Neo4j
- Cypher
- Graph Data Modeling
- Graph Databases
- NoSQL
- definição de entidades;
- definição de relacionamentos;
- propriedades;
- constraints;
- integridade de dados;
- modelagem de domínios.
- navegação em grafos;
- análise de relacionamentos;
- consultas baseadas em padrões;
- fundamentos de recomendação.
- Git
- GitHub
- organização de artefatos
- documentação técnica
O modelo pode evoluir incorporando novas entidades:
- episódios;
- temporadas;
- estúdios;
- países;
- premiações;
- listas pessoais;
- histórico temporal de visualização.
Também pode evoluir em direção a análises mais avançadas:
- similaridade entre usuários;
- recommendation systems;
- PageRank;
- Community Detection;
- Node Similarity;
- Graph Data Science;
- Graph Machine Learning;
- embeddings;
- avaliação de recomendações.
Uma evolução natural seria utilizar a Neo4j Graph Data Science Library para transformar o modelo em um sistema de recomendação mais avançado.
Este projeto possui finalidade educacional e demonstrativa.
O dataset utilizado é pequeno e construído para demonstrar conceitos de modelagem em grafos.
Portanto:
- não representa uma plataforma de streaming em escala real;
- não utiliza dados reais de usuários;
- não implementa algoritmos avançados de recomendação;
- não possui pipeline de produção.
O foco está nos fundamentos de modelagem, relacionamentos e consultas em Neo4j.
Projeto desenvolvido durante o Bootcamp Neo4j — Análise de Dados com Grafos, da DIO.
Disciplina: Fundamentos de Neo4j
Professor: Matheus Ferreira
Período: Primeiro semestre de 2026
O desafio teve como objetivo aplicar conceitos de modelagem em grafos, Cypher, constraints, relacionamentos e consultas em um domínio próximo de uma aplicação real.
Marcus Guedes
Marketing | Data Science | Inteligência Artificial | Gestão de Projetos
- GitHub: MCLG1661
- LinkedIn: Marcus Guedes
🎬 Transformando dados em conexões e conexões em conhecimento.
