Home | Escopo e Cronograma | Processo | Design/Mockups | Configuração | Arquitetura | Infra | Código | BD | Frontend | API Backend |
---|
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 15
Neste projeto, utilizamos o PostgreSQL 15 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 15
- 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": 17,
"id_store": 3,
"items": [
{
"id": 9,
"storeID": 3,
"name": "Produto 1",
"description": "Produto teste",
"photos": [
"https://example.com/photo.jpg"
],
"category": [
{
"id": 1,
"name": "Roupas"
}
],
"variant": {
"price": 10,
"stock": 1,
"options": {
"Cor": "Vermelho",
"Tamanho": "M"
}
},
"quantity": 5,
"lastUpdated": "2025-06-16T17:28:04.576495"
}
]
}
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.