Skip to content

Conversation

@pitangainnovare
Copy link
Contributor

O que esse PR faz?

Este Pull Request foca em otimizar a forma como as métricas de uso são computadas e indexadas, além de adicionar índices em campos chave do banco de dados para melhorar o desempenho de queries. As principais modificações incluem:

  • Cache de objetos para o processamento de logs: Introduz um cache em memória para objetos de banco de dados (Item, UserAgent, UserSession, ItemAccess) durante o processamento de linhas de log, reduzindo significativamente o número de requisições ao banco de dados e otimizando o processo de registro de acessos.
  • Aprimoramento da função _process_user_sessions: Refatora a lógica para buscar todos os ItemAccess relacionados a uma coleção e data de uma vez, em vez de iterar por UserSession e depois por seus ItemAccess individualmente. Isso minimiza as operações de banco de dados e melhora a eficiência.
  • Adição de índices:
    • Cria um índice no campo scielo_issn da tabela journal.
    • Cria um índice composto nos campos collection e scielo_issn da tabela article.
    • Cria um índice no campo date da tabela log_manager_logfiledate.
    • Cria um índice composto nos campos date e log_file da tabela log_manager_logfiledate.
    • Cria um índice no campo datetime da tabela metrics_usersession.
    • Cria um índice composto nos campos item e user_session da tabela metrics_itemaccess.
    • Esses índices visam acelerar as operações de busca e junção nas tabelas mais acessadas durante o cálculo de métricas e outras funcionalidades do sistema.
  • Atualização das versões: Atualiza a versão do scielo_usage_counter para 1.5.0 e a versão geral da aplicação para 1.11.0.
  • Melhorias na documentação de funções: Adiciona docstrings mais detalhadas para funções em metrics/tasks.py e core/utils/date_utils.py para melhorar a clareza e manutenibilidade do código.

Por onde a revisão poderia começar?

A revisão pode começar pelos arquivos que contêm as principais alterações de lógica e otimização:

  • metrics/tasks.py (para as otimizações de cache e processamento de dados)
  • article/models.py e journal/models.py (para a adição dos novos índices e alteração do db_index de scielo_issn em journal)
  • log_manager/models.py (para a adição de índices)

Como este poderia ser testado manualmente?

N/A

Algum cenário de contexto que queira dar?

As otimizações implementadas neste PR são cruciais para a escalabilidade e desempenho do sistema, especialmente ao lidar com grandes volumes de dados de log. Antes dessas alterações, o processo de parsing e registro de acessos era muito intensivo em termos de requisições ao banco de dados, o que podia causar lentidão e gargalos. O uso de cache em memória e a busca massiva de objetos relacionados antes da iteração contribuem para um processamento mais eficiente, permitindo que a aplicação lide com mais dados em menos tempo.

A adição dos índices é uma medida fundamental para melhorar o desempenho das consultas ao banco de dados. Campos como scielo_issn, collection, date, item e user_session são frequentemente utilizados em filtros e junções, e a indexação desses campos garante que as operações de busca sejam realizadas de forma mais rápida, impactando positivamente a performance de relatórios e dashboards.

Screenshots

N/A

Quais são tickets relevantes?

#98

Referências

N/A

@pitangainnovare pitangainnovare merged commit 89fb398 into scieloorg:main Jun 13, 2025
2 checks passed
@pitangainnovare pitangainnovare deleted the impl/optimize-db-usage branch June 13, 2025 01:06
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.

2 participants