Foros del Web » Programando para Internet » PHP »

Scrip en PHP muy pesado, como dividirlo

Estas en el tema de Scrip en PHP muy pesado, como dividirlo en el foro de PHP en Foros del Web. Que tal tengo un scrip en PHP que realizan varias consultas en MySQL, dependiendo del resultado de cada una de estas consultas realizan operaciones algebraicas ...
  #1 (permalink)  
Antiguo 19/03/2009, 14:53
 
Fecha de Ingreso: marzo-2008
Mensajes: 30
Antigüedad: 16 años, 1 mes
Puntos: 0
Scrip en PHP muy pesado, como dividirlo

Que tal tengo un scrip en PHP que realizan varias consultas en MySQL, dependiendo del resultado de cada una de estas consultas realizan operaciones algebraicas y por ultimo actualizan la base de datos con la nueva informacion obtenida.

son operaciones sencillas, y las ejecuto muy facilmente porque son pocos los registros, menos de 100. en menos de 30seg (timpo max de ejecucion por defaul).

ahora me sale la duda que pasaria si estos registros se incrementara grandemente, miles, habria alguna forma de que este scrip se particinara o dividiera la tarea para que no intentara hacer todas los calculos de un jalon?, para evitar errores como maximo tiempo de ejecucion excedido, o poder ver en que operacion va con un porcentaje

10% o paso 1 de 10.

por ejemplo si fueran 5000 registros, que lo dividieramos en una constante por decir 500, y que primero agarrara los primeros 500 registros y haga las operaciones correspondientes y terminando eso siguiera con los siguientes 500, y asi sucecivamente hasta terminar con todos los registros.

se me ocurren varias maneras pero no se si sean posibles. mexclando PHP y javascript.

///inicio del scrip

1. realizar una consulta para saber el numero de registros actuales
2. dividirlos en una constante para saber cuantos pasos nesesitamos
3. mandar el numero de pasos para ejecutar el scrip secundario (de operaciones)
pudiendo utilizar un formulario con javascript para decirle a al script secundario de php que paso es el que va (por ejemplo consulta de registro del 500 a 1000, enviado en la URL )
4. tomar la respuesta generada por PHP para actualizar la pagina y mandar ejecutar el siguiente paso

/// fin del scrip

QUE ME ACONSEJAN?
Gracias por adelantado
  #2 (permalink)  
Antiguo 19/03/2009, 15:05
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: Scrip en PHP muy pesado, como dividirlo

¿Hacerlo por bloques? Actualizas un bloque de registros, luego en el siguiente paso, empiezas donde lo dejaste anteriormente, y así sucesivamente. No sé si te servirá.
  #3 (permalink)  
Antiguo 19/03/2009, 17:48
 
Fecha de Ingreso: marzo-2008
Mensajes: 30
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Scrip en PHP muy pesado, como dividirlo

Cita:
Iniciado por Bonez Ver Mensaje
¿Hacerlo por bloques? Actualizas un bloque de registros, luego en el siguiente paso, empiezas donde lo dejaste anteriormente, y así sucesivamente. No sé si te servirá.
Muchas gracias, eso me parece muy buena solucion, pero como hago para hacer los bloques?

gracias.
  #4 (permalink)  
Antiguo 20/03/2009, 08:00
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: Scrip en PHP muy pesado, como dividirlo

Puedes restringir los resultados de la base de datos con LIMIT.

Creo haber entendido que sacas los datos de la base de datos, pues en vez de sacarlos todos, sacas solamente unos 100 ó 300, los que creas convenientes. Digamos que sacas 100.
Pues cuando haga todas las operaciones, puedes poner un link debajo que pase una variable por GET con la cantidad de registros ya completados, o por el número de bloque que va.

Es decir, si lo haces por números de registros el link, pues que apunte hacia pagina.php?registros=100 (luego en la consulta le dices que continúe por éste registro, por el 100+1) y si lo haces por bloque, que el link apunte a pagina.php?bloque=1 (calculas 1*numero de registros por ejecución, en éste caso es 1*100=100, y le sumas 1 para que no vuelva a hacer el registro 100).

Creo que me expliqué bastante mal.
  #5 (permalink)  
Antiguo 20/03/2009, 08:46
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Scrip en PHP muy pesado, como dividirlo

Tambien ayuda mucho que en lugar de dejarle todo el proceso de calculo al servidor de Base de Datos, le pases un poco de esa tarea a los clientes (al servidor WEB).

Por solo poner un ejemplo en caso de que tu consulta utilices un COUNT para saber cuantos registros tienes en una consulta, puedes cambiarlo a desagruparlo y quitarle ese COUNT de tal manera que esos registros los cuentes a traves de un for (u otro metodo) usando php ya del lado del cliente, en el caso de que tu servidor web y tu servidor de base de datos esten en diferentes maquinas ya les estas distribuyendo la carga de trabajo y aunque esten en mismo servidor, a cada proceso (Servidor WEB y Servidor DB) le sestas distribuyendola carga de trabajo.

Bueno asi fue como pude disminuir la carga de trabajo de unos scripts muy pesados ya
  #6 (permalink)  
Antiguo 20/03/2009, 11:19
 
Fecha de Ingreso: marzo-2008
Mensajes: 30
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Scrip en PHP muy pesado, como dividirlo

muchas gracias a todos, esto es lo que hice:

1. hice un peque#o scrip en PHP donde reaalice una consulta para conocer el numero de registros y dividirlos por una constante (100), para saber cuantos bloques voy a ocupar, despues mando esa info una URL donde se realizara todo el proceso por bloques.
2. al recibir la informacion del scrip anterior empieza a separar las operaciones por bloques, inclui un formulario que se envia a si mismo, y aparece un boton de continuar para ejecutar el siguiente bloque, ademas de un letrero con los pasos totales y el que va, y tambien un porcentaje de toda la operacion

paso 1 de 5, 20% completado

3. cheque las operaciones y todo quedo muy bien, solo me falta ver si puedo hacer que este ultimo formulario se puede enviar por si solo al terminar de cargar el achivo y no aplastar el boton de continuar para seguir con el siguiente bloque.

Espero que esta info le sirva a alguien mas.
Gracias.
  #7 (permalink)  
Antiguo 20/03/2009, 15:21
 
Fecha de Ingreso: marzo-2008
Mensajes: 30
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Scrip en PHP muy pesado, como dividirlo

Cita:
Iniciado por danieltv2002 Ver Mensaje

3. cheque las operaciones y todo quedo muy bien, solo me falta ver si puedo hacer que este ultimo formulario se puede enviar por si solo al terminar de cargar el achivo (pagina) y no aplastar el boton de continuar para seguir con el siguiente bloque.
prove esto pero no me funciono

<body onLoad="javascript:enviarForm();">

<script language="javascript">
function enviarForm()
{
document.form01.submit();
}
</script>

//donde form01 es el nombre del formulario


Donde podra estar el error?
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 03:20.