Seleção do Banco de Dados - 98Lanches/dotlanche-database GitHub Wiki

Visão Geral do Contexto

O projeto envolve um pequeno negócio que está crescendo, com uma demanda variável influenciada por fatores como fins de semana, feriados e férias escolares. À medida que o negócio expande, várias necessidades operacionais surgem:

  • Pedidos Personalizados: Embora não faça parte do MVP, há uma grande possibilidade de no futuro permitir que os clientes modifiquem os pedidos (ex.: alterar ingredientes em lanches ou sobremesas).
  • Diversidade de Categorias de Produtos: Os clientes podem fazer pedidos contendo apenas algumas categorias de produtos, como apenas sobremesas ou bebidas.
  • Serviço de Pagamento Externo: Os pagamentos são processados por um sistema externo, ou seja, o sistema interno só precisa enviar o valor e aguardar a confirmação, sem lidar diretamente com as transações financeiras.
  • Gerenciamento de Produtos: O sistema deve gerenciar as informações dos produtos, com flexibilidade para adicionar novos atributos conforme o crescimento do mercado ou exigências legais (como identificação de origem animal, lactose ou glúten).
  • Fila de Pedidos: O sistema deve rastrear os status dos pedidos e fornecer atualizações em tempo real.

Dado esse cenário, a escolha do banco de dados é fundamental para atender às necessidades do negócio, especialmente no que se refere à escalabilidade, flexibilidade e desempenho.


Comparação de Bancos de Dados SQL e NoSQL

1. Bancos de Dados SQL:

Bancos de dados SQL são conhecidos por seu esquema estruturado e adesão aos princípios ACID (Atomicidade, Consistência, Isolamento e Durabilidade). Embora ofereçam muitos benefícios, sua rigidez e limitações de escalabilidade vertical os tornam menos ideais para as necessidades deste projeto.

  • Rigidez de Esquema: Bancos de dados SQL impõem um esquema rígido que garante uniformidade e confiabilidade dos dados. Embora isso seja bom para entidades bem definidas, limita a flexibilidade quando é necessário adicionar novos atributos aos produtos (ex.: rotulagem de alérgenos ou modificações personalizadas em lanches).
  • Escalabilidade Vertical: Bancos de dados SQL escalam principalmente de forma vertical, o que significa que aumentar a capacidade do servidor requer hardware mais caro e poderoso.
  • Consultas com SQL: Bancos de dados SQL utilizam linguagem de consulta estruturada (SQL), o que oferece ferramentas poderosas para gerenciar dados estruturados, mas pode ser menos eficiente ao lidar com grandes volumes de tráfego ou dados não estruturados.
  • Consistência: Bancos de dados SQL garantem um alto nível de consistência e durabilidade dos dados, o que é útil para transações financeiras, mas não é crucial para este sistema, dado que o processamento de pagamentos é feito por um serviço externo.

2. Bancos de Dados NoSQL:

Por outro lado, os bancos de dados NoSQL se destacam em cenários onde flexibilidade, desempenho e escalabilidade horizontal são fatores críticos. Essas características estão mais alinhadas com as necessidades do negócio, especialmente à medida que ele cresce e diversifica suas ofertas.

  • Desempenho e Flexibilidade: Bancos de dados NoSQL oferecem maior desempenho de leitura e gravação durante picos de demanda, o que é essencial, considerando a variação sazonal e imprevisível da demanda. Além disso, o esquema flexível é mais adequado para lidar com diferentes categorias de produtos e para preparar o sistema para futuras funcionalidades (ex.: novos detalhes de clientes ou opções de pedidos personalizados).
  • Escalabilidade Horizontal: Conforme o negócio se expande, os bancos de dados NoSQL podem escalar horizontalmente, adicionando mais servidores para garantir melhor desempenho durante períodos de alto tráfego, sem a necessidade de upgrades caros de hardware.
  • Dados Não Estruturados: Como os pedidos dos clientes podem variar bastante (ex.: pedidos personalizados ou apenas de categorias específicas), a capacidade dos bancos de dados NoSQL de lidar eficientemente com dados não estruturados ou semiestruturados é uma grande vantagem.
  • Esquema Dinâmico: A flexibilidade de esquema dos bancos de dados NoSQL permite a adição de novos campos (como atributos de produtos ou opções de pedidos personalizados) sem grandes modificações no design do banco de dados, garantindo que o sistema possa se adaptar conforme as necessidades do negócio evoluem.

Escolha de banco de dados NoSQL

Dado o contexto do negócio e os requisitos específicos do projeto, o banco de dados NoSQL foi a escolha pelos seguintes motivos:

  1. Lidar com a Demanda Variável e Escalabilidade:

    • O negócio enfrenta flutuações de demanda (fins de semana, feriados), e a capacidade do NoSQL de escalar horizontalmente garante que o sistema consiga lidar com picos de tráfego de forma eficiente.
  2. Flexibilidade para Pedidos Personalizados:

    • A possibilidade de modificar produtos (ex.: alterar ingredientes) exige um banco de dados que possa lidar com esquemas dinâmicos. O NoSQL permite ajustes fáceis nas informações dos produtos, tornando-se uma solução mais adaptável à medida que as opções de personalização aumentam.
  3. Diversidade de Categorias de Produtos:

    • Os pedidos podem conter itens de diferentes categorias, cada um com atributos específicos. A flexibilidade do NoSQL facilita a acomodação dessas diferenças sem exigir uma estrutura rígida de esquema.
  4. Gerenciamento Eficiente de Pedidos:

    • Rastrear o status dos pedidos em tempo real é essencial para o negócio. O desempenho de leitura e gravação do NoSQL permite atualizações rápidas e confiáveis na fila de pedidos, garantindo que os clientes e a equipe estejam sempre cientes dos status dos pedidos.
  5. Preparado para o Futuro:

    • À medida que o negócio cresce, novas exigências regulatórias ou atributos de produtos podem precisar ser adicionados (ex.: alérgenos, presença de glúten). A flexibilidade do NoSQL facilita a introdução de novos pontos de dados sem interrupções no sistema existente.

Conclusão

Em resumo, o NoSQL é a escolha de banco de dados para este projeto devido à sua capacidade de lidar com as necessidades variáveis e em evolução do negócio. Sua flexibilidade, escalabilidade e alto desempenho estão alinhados com os requisitos de um pequeno negócio em expansão, garantindo que ele possa atender tanto às demandas atuais quanto futuras de forma eficiente. Embora o SQL ofereça consistência e estrutura, a natureza dinâmica e imprevisível desse negócio faz do NoSQL a escolha preferível para o time.