Foros del Web » Programando para Internet » PHP »

Enviar millones de datos para que el servidor lo procese en PHP

Estas en el tema de Enviar millones de datos para que el servidor lo procese en PHP en el foro de PHP en Foros del Web. Hola, Tengo una duda, estoy desarrollando una aplicación en php y me gustaría enviar millones de datos al servidor para que procese uno a uno, ...
  #1 (permalink)  
Antiguo 22/03/2016, 16:05
 
Fecha de Ingreso: septiembre-2010
Mensajes: 75
Antigüedad: 13 años, 7 meses
Puntos: 1
Pregunta Enviar millones de datos para que el servidor lo procese en PHP

Hola,
Tengo una duda, estoy desarrollando una aplicación en php y me gustaría enviar millones de datos al servidor para que procese uno a uno, es decir, por ejemplo, quiero que cree 1 millón de pdf con variables únicas que están en la base de datos con MySQL, para esto pensaba pasar cada pdf por un proceso while y en cada ciclo se hace una consulta a la DB para sacar las variables únicas y se procese uno a uno cada pdf.

La duda en si es si esto puede tomar mucho tiempo? es buena practica? o como podría hacer para enviar todo este procesamiento al servidor y al cliente mostrarle un simplemente "Le enviaremos un mail cuando este terminado" o tal ves un "PDF terminados, puede cerrar la ventana y continuar con sus tareas".

Nota: Lo he probado con 10 PDF hasta ahora y es super rápido, no toma ni dos segundos hacerlo pero cuando son millones, imaginando 10 millones de pdf, me preocupa que el servidor se caiga.

Gracias de antemano a quien pueda ayudarme.
  #2 (permalink)  
Antiguo 22/03/2016, 16:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar millones de datos para que el servidor lo procese en PHP

Cita:
La duda en si es si esto puede tomar mucho tiempo?
Obviamente sí, ¡son millones de registros en un loop!

Cita:
es buena practica?
Definitivamente sí.

Ejecutar dichos procesos desde el navegador sería lo más grave.

Cita:
mostrarle un simplemente "Le enviaremos un mail cuando este terminado" o tal ves un "PDF terminados, puede cerrar la ventana y continuar con sus tareas".
Usando cronjobs es muy simple, un proceso del sistema ejecuta tus scripts en segundo plano y eventualmente ya puedes notificar al usuario por otros medios, etc.

Cita:
no toma ni dos segundos hacerlo pero cuando son millones
Obvio: multiplica 1s x 1000000 y sufre.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/03/2016, 17:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 75
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Enviar millones de datos para que el servidor lo procese en PHP

Oye muchas gracias por tu respuesta, en verdad me despejas de dudas.

Por casualidad sabes algún lugar de donde pueda aprender a usar estos cronjobs con PHP que tengan buenas practicas?

Muchas gracias de nuevo!
  #4 (permalink)  
Antiguo 29/03/2016, 21:41
 
Fecha de Ingreso: septiembre-2010
Mensajes: 75
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Enviar millones de datos para que el servidor lo procese en PHP

Hola Amigo, ahora tengo la siguiente duda, he estado estudiando acerca de cron jobs y como funcionan y no parece complicado, es sencillo, pero la duda que tengo ahora es:
Cómo ejecuto el cron desde el PHP con variables que se envían de un javascript?

Pasa que no requiero que el cron job se ejecute cada cierto tiempo indefinidamente, solo quiero que se ejecute cuando el cliente web envié los datos que son capturados por un javascript que luego se enviarían al cron para que se ejecute desde el server y no desde el navegador. y al final enviar notificación al usuario de que todo se completo satisfactoriamente. Es todo. Cómo se podría hacer esto?
  #5 (permalink)  
Antiguo 29/03/2016, 21:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar millones de datos para que el servidor lo procese en PHP

Es complicado si lo tratas de analizar directamente, porque son tres ambientes totalmente desconectados: el cronjob, el servidor web y el navegador.

No hay forma de comunicar el navegador con el cronjob directamente, ni es posible comunicar el servidor web tampoco: porque es configuración a nivel del sistema operativo.

Lo que sí puedes hacer es manejar mensajes, que podrían ser archivos de texto o base de datos.

Es decir, en tu aplicación web registras un "evento" en la base de datos, y el cronjob sencillamente "escucha eventos", etc.

Un "evento" es sólo un registro en la BD que indica que tarea sea va a realizar así como los datos necesarios, su fecha de inicio, etc.

El cronjob debe consultar registros que estén sin finalizar, y los procesaría de uno a uno, terminando sólo actualizas el registro: entonces tu aplicación web puede volver a consultar cada cierto tiempo qué registros/eventos del usuario actual ya finalizaron y entonces notificar, etc.

No es sencillo pero es la idea más simple que se me ocurre.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 31/03/2016, 17:53
 
Fecha de Ingreso: septiembre-2010
Mensajes: 75
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Enviar millones de datos para que el servidor lo procese en PHP

Voy a probar que estas variables capturadas en Javascript, se guarden en la DB, y que el cronjob este consultando una tabla de "eventos" donde estarán las variables de cada trabajo (Guardadas anteriormente) y si hay algo disponible sencillamente que haga el trabajo y así sucesivamente.
Muchas gracias. Escribiré mas adelante como me va con esto.
  #7 (permalink)  
Antiguo 09/04/2016, 16:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 75
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Enviar millones de datos para que el servidor lo procese en PHP

He estado trabajando y funciona perfectamente si son pocos datos.

Me surgió una nueva duda: Si configuro el cronjob para que se ejecute cada 15 minutos, y por ejemplo, en una primera ejecución, el cronjob se tarda más de 15 minutos en terminar y tiene que volver a ejecutarse, que pasa con este primer proceso? Se elimina? Se aborta y vuelve a funcionar el cronjob desde 0?

Gracias por la ayuda de antemano
  #8 (permalink)  
Antiguo 10/04/2016, 02:01
 
Fecha de Ingreso: mayo-2013
Mensajes: 169
Antigüedad: 10 años, 10 meses
Puntos: 25
Respuesta: Enviar millones de datos para que el servidor lo procese en PHP

Cita:
Iniciado por cristaken Ver Mensaje
He estado trabajando y funciona perfectamente si son pocos datos.

Me surgió una nueva duda: Si configuro el cronjob para que se ejecute cada 15 minutos, y por ejemplo, en una primera ejecución, el cronjob se tarda más de 15 minutos en terminar y tiene que volver a ejecutarse, que pasa con este primer proceso? Se elimina? Se aborta y vuelve a funcionar el cronjob desde 0?

Gracias por la ayuda de antemano
Creo que pueden llegar a solaparse, ya que si no recuerdo mal yo tuve ese problema. Lo que creo que hice fue crear una variable en una base de datos, y ponerla a 0 por defecto, y cuando empezaba la ejecución ponerla a 1, y cuando terminase volverla a 0. Y comprobaba siempre que se empezara a ejecutar el CRON si dicha variable estaba en 0 o 1, asi sabía si había un proceso ya abierto. En dicho caso no hacia nada en la nueva ejecución.

De todas maneras, eso viene bien para prevenir, pero si cada 15 minutos se solapasen, deberías ampliar el rango de tiempo de ejecución del CRON.

Etiquetas: millones, mysql, servidor, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:40.