Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
La pila de aplicaciones está muy ocupada mientras ejecuta una tarea grande, necesita ayuda para la cola micro/alternativa

nuestra aplicación de back-end NodeJS tiene más de 200 000 usuarios y cada semana hacemos algunos controles/cálculos basados en los usuarios. El funcionamiento es similar a este:

 const users = await dbService.user.findMany({}); // Array of 200K+ users for (let index = 0; index < users.length; index++) { const user = users[index]; const result = await checkUserSubscriptions({ id: user.id }); // do operations according to result, mostly updateUser in database. }

Durante el proceso, la mayoría de las demás solicitudes no se ejecutan o se esperan hasta que finaliza esta operación. Por ejemplo, cuando un usuario intenta iniciar sesión, espera hasta que finaliza este bucle o sufre un gran retraso. Debido a que esta operación no necesita ser instantánea y puede demorarse o ser lenta, necesito usar algo más que no bloquee nuestra cola principal. ¿Qué puedo hacer para asegurar esto?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Lo que intenta hacer es como un trabajo en segundo plano y no debería estar en el mismo proceso de su servicio web. El uso de memoria del procesamiento de 200 000 usuarios tendrá un impacto en el rendimiento de su servicio web. La arquitectura de Nodejs es de subproceso único y no importa si intenta ejecutar tareas asíncronas de 200K, el rendimiento de su servicio web se verá afectado.

Puede ver worker_threads , útil para realizar operaciones de JavaScript con uso intensivo de CPU. Hay otros paquetes que pueden ayudarte. Puedes echar un vistazo al toro

about 4 years ago · Juan Pablo Isaza Denunciar

0

Es una mala práctica colocar un await dentro de un bucle porque hace que el código sea sincrónico y se pierde la capacidad de paralelismo: cada iteración del bucle tiene que esperar a que se complete la anterior antes de activarse.

Deberías usar Promise.all :

 const users = await dbService.user.findMany({}); // Array of 200K+ users const results = await Promise.all(users.map((user) => { return checkUserSubscriptions({ id: user.id }); })) // results is an array of returned values from checkUserSubscriptions
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda