Home | Escopo e Cronograma | Processo | Design/Mockups | Configuração | Arquitetura | Infra | Código | BD |
---|
Documentação do Banco de dados
Neste projeto, utilizamos um banco de dados misto, com a base em um banco de dados relacional - utilizando o PostgreSQL - para os dados de quase toda a aplicação, exceto pela lógica dos carrinhos de compras dos usuários, que foi feita de maneira não relacional - utilizando o Redis - para ter um melhor desempenho com esses registros de maior volatilidade.
Banco de Dados Relacional PostgreSQL 12
Neste projeto, utilizamos o PostgreSQL 12 como nosso sistema de gerenciamento de banco de dados. O PostgreSQL é um sistema de banco de dados relacional de código aberto altamente confiável e poderoso, que oferece suporte a uma variedade de recursos avançados, como transações, indexação eficiente e consultas complexas.
Modelo Conceitual
A modelagem conceitual foi feita utilizando a ferramenta Astah Professional:
Modelo Lógico
A modelagem lógica foi feita utilizando a ferramenta online DrawSQL, por oferecer suporte às funcionalidades específicas do PostgreSQL:
Funções de Acesso
Foram feitas Stored Procedures para limitar o acesso ao banco, de maneira que seja controlada. Foram feitas funções para todos os métodos necessários de inserção, remoção, atualização e visualização dos dados.
PostgreSQL 12
- Desempenho: O PostgreSQL é conhecido por seu desempenho excepcional, especialmente quando se trata de consultas complexas e grandes conjuntos de dados.
- Confiabilidade: É altamente confiável, com suporte a transações ACID (Atomicidade, Consistência, Isolamento e Durabilidade) para garantir a integridade dos dados.
- Escalabilidade: O PostgreSQL é escalável e pode lidar com cargas de trabalho crescentes à medida que o projeto se expande.
Banco de Dados Não Relacional com Redis
Neste projeto, utilizamos o Redis como nosso sistema de gerenciamento de banco de dados não relacional. O Redis é um banco de dados em memória de código aberto, amplamente utilizado por sua alta performance, simplicidade e suporte a estruturas de dados avançadas, como listas, conjuntos, hashes e strings.
Utilizamos uma estrutura em JSON com a lista de itens do carrinho, contendo todas as informações necessárias em cada item, e indexado pelo ID do usuário, aproveitando que o carrinho e o usuário tem uma relação 1-1.
"id_user": 101,
"id_store": 501,
"itens": [
{
"id_product": 1,
"name": "Camisa Polo Masculina",
"description": "Camisa polo de algodão confortável e elegante.",
"last_updated": "2025-04-10T14:30:00Z",
"id_product_variant": 1001,
"stock": 50,
"price": 79.90,
"details": "Tamanho M, cor azul-marinho",
"is_active": true,
"photos": [
"https://example.com/fotos/camisa-polo-1.jpg",
"https://example.com/fotos/camisa-polo-2.jpg"
]
},
{
"id_product": 2,
"name": "Tênis Esportivo Feminino",
"description": "Tênis leve e confortável para corridas e caminhadas.",
"last_updated": "2025-04-11T09:15:00Z",
"id_product_variant": 1002,
"stock": 120,
"price": 229.99,
"details": "Tamanho 37, cor rosa",
"is_active": true,
"photos": [
"https://example.com/fotos/tenis-esportivo-1.jpg",
"https://example.com/fotos/tenis-esportivo-2.jpg"
]
}
]
}
Redis
-
Desempenho: O Redis é extremamente rápido, oferecendo operações com latência muito baixa, uma vez que armazena todos os dados diretamente na memória. Isso o torna ideal para aplicações que exigem respostas em tempo real.
-
Confiabilidade: Apesar de ser um banco em memória, o Redis oferece mecanismos robustos de persistência, como snapshots e log de operações (AOF), garantindo a durabilidade dos dados mesmo em caso de falhas.
-
Escalabilidade: O Redis é altamente escalável, suportando replicação, particionamento de dados (sharding) e integração com soluções de alta disponibilidade (Redis Sentinel) e escalabilidade horizontal (Redis Cluster), permitindo seu uso em aplicações com grande volume de acessos simultâneos.