DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on

[Desafio] - 10 Desafios Simples de System Design: Resolução 0/9 (Separar um Banco de Dados em Dois)

Conteúdo Original em https://twitter.com/zanfranceschi/status/1639309447918157824


Ei dev,

Proposta de resolução do Desafio 0/9 dos 10 Desafios Simples de Design System que postei recentemente.

Image

https://twitter.com/zanfranceschi/status/1638232583057313792


A principal coisa que você deveria considerar num desafio assim é o motivo da separação. Quando passei por isso, era literalmente para aliviar o banco, deixá-lo com menos registros para que ficasse mais rápido. O banco tinha muitos milhões de registros.

A solução foi simples.


- Criação duma Rotina Diária de Movimentação de Dados

Criei uma rotina diária para fazer a movimentação dos registros mais antigos que X tempo para o banco histórico. Claro, a definição de X foi feita depois de uma análise das consultas mais comuns em termos de período.


- Modificação nas Rotinas de ETL

Esse banco servia de insumo para relatórios. E essa foi a parte mais chata pois foi necessário fazer joins para os relatórios que contivessem dados dos dois bancos (informações anuais, por exemplo).


- Modificação na Experiência do Usuário

Seria complexo e contra o propósito da separação dos banco continuar oferencendo aos usuários dados antigos de forma transparente. Por isso, simplesmente foi adicionada uma funcionalidade nova e separada de consulta de registros antigos.


Essa funcionalidade de consulta de dados antigos funcionava de forma assíncrona – uma planilha era gerada após o processamento. Assim, foi fácil manter o banco histórico com poucos recursos computacionais e com bom controle de demanda de acessos.


Se na funcionalidade de consulta já existente fosse detectada uma consulta maior que o período X definido, era mostrada uma mensagem sobre a opção da consulta histórica.

E essa foi a solução adotada para esse desfio – funcionou muito bem.

Top comments (0)