perf(basket): parallelize batch ingest and memoize Geo/UA lookups
@sundaram2021 ya está trabajando en esto.
Desde el 21/9/2026.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 55/100
- Tipo de issue
- Refactorización
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- analytics, backend, performance
Línea de trabajo
Start in apps/basket/src/routes/basket.ts, reading the batch handler at lines 572-611 and getBatchVisitorCountry around line 561. Trace checkForBot, validateEventSchema, processTrackEventData, getGeo, and parseUserAgent before changing the batch flow. Done means batch work is parallelized and lookups are reused while preserving result ordering and bot-ignore semantics.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
Basket batch ingest processes events serially and repeats GeoIP + UA parsing per event, limiting throughput on large batches.
What's the issue
In apps/basket/src/routes/basket.ts:572-611, the batch handler loops with await checkForBot, await validateEventSchema, await processTrackEventData per event. processTrackEventData does Promise.all([getGeo(ip), parseUserAgent()]) per item, so a 50-event batch pays 50x GeoIP + UA + bot scans serially. Only the outgoing_link path memoizes via getBatchVisitorCountry:561.
Proposed fix
- Validate schemas in chunked parallel batches (e.g. Promise.allSettled, size 10).
- Memoize getGeo + parseUserAgent by distinct (ip, ua) key per batch request.
- Keep per-event result ordering and bot-ignore semantics.
- Lenguaje dominante
- TypeScript
- Estrellas
- 1.2k
- Forks
- 227
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
area:web p3
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Lets-Parley/Parley#912 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
wealthfolio/wealthfolio#2376 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
be-BOP-io-SA/be-BOP#2817 ·
Los mantenedores suelen responder en 5 días
-
documentation good first issue
Dificultad 1/5 1-3 horas Aptitud para principiantes 84/100
sno-ai/sno-station#149 · 1 comentario ·
Los mantenedores suelen responder en 1 día