Skip to content

Otimização de queries e resolução de gargalos de performance em Contas a Pagar#2

Open
samueljml wants to merge 3 commits intolucrorural:mainfrom
samueljml:optimize-accounts-payable-list
Open

Otimização de queries e resolução de gargalos de performance em Contas a Pagar#2
samueljml wants to merge 3 commits intolucrorural:mainfrom
samueljml:optimize-accounts-payable-list

Conversation

@samueljml
Copy link

@samueljml samueljml commented Feb 4, 2026

Esta PR melhora a performance da listagem de Contas a Pagar e Notas Fiscais e padroniza respostas da API.

Otimizações de performance

Para reduzir o tempo de resposta e otimizar o consumo de recursos, foram implementadas as seguintes técnicas:

  • Redução de carga de dados (Query optimization):
    • Utilização de .annotate(total_notas=Count('notas_fiscais')) para realizar cálculos agregados diretamente no banco de dados.
    • Aplicação de .only() na listagem para buscar apenas os campos estritamente necessários, reduzindo o tráfego de dados entre DB e aplicação.
  • Resolução do problema N+1:
    • Implementação de .prefetch_related('notas_fiscais') no endpoint de detalhes, otimizando a consulta de relacionamentos Many-to-Many e eliminando múltiplas queries redundantes.
  • Escalabilidade via paginação, filtros e ordenação
    • Segmentação de resultados: Criação de uma classe de paginação customizada para evitar o carregamento massivo de registros na memória, garantindo tempos de resposta consistentes mesmo com grande volume de dados.
    • Recursos de busca e organização:
      • Filtros: Implementação por status para buscas precisas.
      • Ordenação: Suporte para data_vencimento, valor e total_notas.

Decisões de arquitetura e segurança

  • Consistência de dados sensíveis: Optei por não utilizar cache de página (@cache_page) nos endpoints financeiros. Dada a natureza crítica de Contas a Pagar, a precisão e a consistência em tempo real são prioritárias sobre a economia de processamento que o cache ofereceria.
  • Tratamento de erros padronizado: Implementação de um CustomExceptionHandler que retorna mensagens estruturadas, facilitando o consumo e o tratamento de exceções pelo Front-end.
  • Atualização Python 3.12: Necessária para compatibilidade com Django 6.0.x, que exige Python 3.12+. O README foi atualizado para refletir essa exigência.

📊 Validação de Performance (benchmark.py)

Para validar as hipóteses de otimização e garantir a entrega dos requisitos, foi desenvolvido um script de benchmark:

  • Metodologia: O script simula carga de uso real, executando múltiplas chamadas aos endpoints para calcular o tempo médio de resposta e identificar possíveis latências.
  • Finalidade: Utilizado exclusivamente para testar a performance dos endpoints após as otimizações de query e indexação.
  • Observação: Este arquivo é uma ferramenta de suporte ao desenvolvimento e não faz parte do código-fonte de produção.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant