Todas as notas

NOTAS DE ESTUDO

Twitch - Pipeline de engenharia de dados

Faz tempo que não escrevo aqui, então quero compartilhar o que estou fazendo agora.

Meu programa de estágio terminou e conquistei uma certificação AWS. Estou orgulhoso: é bom alcançar objetivos desafiadores. Agora, vamos ao projeto pessoal.

Recentemente, pensei em criar um pipeline de plataforma de streaming com IA generativa para verificar se streamers cumprem condições de uso justo e direitos autorais. O pipeline coletaria ID e nome do usuário, ID da transmissão, quantidade de espectadores, nome do jogo, horário de início, indicação de conteúdo adulto e URL da miniatura. Esses campos são um ponto de partida para entender quem transmite, quantas pessoas assistem e qual categoria está sendo usada. Alguns streamers mudam para categorias menos populares para evitar detecção; essas categorias costumam receber menos denúncias. Escolhi a Twitch porque sua API é organizada e robusta, e já aprendi bastante com ela.

A API trouxe meu primeiro grande aprendizado: nunca tinha usado paginação por cursor. É possível solicitar apenas 100 itens por chamada. Os cursores funcionam como páginas de um jornal: não se pode saltar diretamente para a página 3 sem passar pelas páginas 1 e 2. Como ganhar velocidade ao lidar com muitos dados e páginas? Minha ideia foi buscar primeiro apenas os IDs. Depois, com os identificadores em mãos, posso usar multithreading e requisições em lote nas consultas detalhadas, sem depender da mesma sequência de cursores.

Requisições com múltiplas threads em Python

Minha primeira ideia foi usar ThreadPoolExecutor (TPE) para enviar requisições em paralelo. Com todos os IDs em um arquivo JSON, podemos fazer várias chamadas de rede simultaneamente e acelerar o processo. Imagine uma loja com um caixa e uma longa fila. Cada cliente passa o cartão e espera a aprovação do banco; durante boa parte desse tempo, o caixa apenas aguarda. Com dez caixas, ou dez threads do ThreadPoolExecutor, novos clientes podem ser atendidos enquanto os anteriores esperam. Como o gargalo é a resposta do banco, ou I/O de rede, e não os cálculos do caixa, ou CPU, adicionar caixas reduz bastante a espera — até atingir o limite de requisições da loja.

Para otimizar ainda mais o pipeline, também explorei outra técnica para grandes volumes de dados.

Requisições em lote para aumentar a eficiência

Além de múltiplas threads, implementei requisições em lote para otimizar a coleta na API Twitch. Elas agrupam várias consultas em uma chamada HTTP, reduzindo as chamadas de rede ao buscar detalhes de centenas de usuários ou transmissões. Em vez de consultar cada ID separadamente, envio uma lista de IDs de uma vez, e o servidor devolve os dados juntos, economizando tempo e evitando limites.

Isso me ensinou a equilibrar o tamanho dos lotes com as restrições da API. Em conjunto com multithreading, o processamento em lote deixa o pipeline mais rápido e escalável para análises em tempo real. Se você já trabalhou com processamento em lote ou otimização de APIs, gostaria de conhecer suas experiências.