GitHub reduz histórico de estrelas de 2.511 requisições para cerca de 24

O GitHub criou uma API específica para histórico de estrelas que devolve contagens diárias, sem identidades, e cobre até 30 semanas por requisição. No exemplo do repositório react/react, reconstruir toda a curva passa de aproximadamente 2.511 chamadas para cerca de 24.

A mudança divulgada em 14 de outubro de 2026 não foi apenas uma redução do JSON. O novo desenho limita o conjunto de linhas antes da agregação, evitando que cada página refaça trabalho sobre todo o histórico atual do repositório.

A API antiga respondia uma pergunta diferente

O endpoint de stargazers foi criado para listar quem marcou um repositório com estrela. Com um media type específico, cada item também informava a data. Ferramentas de histórico passaram a percorrer essa lista, conservar os timestamps e descartar as identidades para desenhar uma curva.

Cada página continha no máximo cem pessoas. Um repositório com cerca de 251 mil estrelas, como o react/react no exemplo do GitHub, exigia 2.511 requisições. O modelo também não era um log completo: quando alguém removia a estrela, o registro desaparecia.

Além de entregar identidades desnecessárias para o gráfico, o caminho tinha um bug de paginação. Cada requisição contava todas as estrelas atuais para calcular o total de páginas. Na semana anterior à restrição de acesso, quase 37 mil dessas contagens entraram no log de queries lentas, com média próxima de três segundos; mais de mil foram interrompidas pelas proteções do banco.

Agrupar tudo e limitar a saída continuava caro

Uma primeira ideia seria agrupar todas as estrelas por dia ou semana e paginar os poucos buckets resultantes. O problema é que o banco ainda precisaria localizar as linhas, agrupá-las e ordenar os buckets antes de aplicar LIMIT e OFFSET.

Segundo a análise publicada pelo GitHub, ler o histórico completo de react/react dessa forma examinaria aproximadamente seis milhões de linhas: cada uma das 24 requisições processaria novamente todo o conjunto de cerca de 251 mil estrelas. A resposta seria pequena, mas o trabalho interno continuaria crescendo com a popularidade do repositório.

O intervalo de tempo passou a vir antes do agrupamento

No desenho publicado, page e per_page são convertidos em um intervalo de datas indexado. O banco seleciona apenas as estrelas das semanas pedidas e então produz contagens diárias. Avançar a página move a janela para trás no tempo.

Com isso, cada estrela é examinada aproximadamente uma vez ao percorrer o histórico inteiro, em vez de ser reprocessada em todas as páginas. Uma chamada cobre até 30 semanas independentemente da quantidade total de estrelas do repositório.

O contrato ficou menor e mais próximo da necessidade

Mantenedores queriam observar a trajetória antes e depois de releases ou anúncios. Eles precisavam de datas e contagens, não de nomes de usuários. Ao representar essa necessidade diretamente, a API reduziu chamadas, retirou identidades do caminho e tornou o custo mais previsível.

A solução ainda possui limites. Um período excepcionalmente denso pode continuar caro, porque o intervalo restringe semanas, mas não a quantidade de estrelas dentro delas. Limites de calendário, remoções de estrelas e a natureza aproximada da curva também fazem parte do contrato.

Fontes