Foros del Web » Programando para Internet » PHP »

Actualizar muchos registros entres 2 tablas MysQL y PHP

Estas en el tema de Actualizar muchos registros entres 2 tablas MysQL y PHP en el foro de PHP en Foros del Web. Hola compañeros, bueno, hoy me tomo el tiempo para preguntar por un problema que tengo desde hace algunos años y apenas se volvio retomar en ...
  #1 (permalink)  
Antiguo 29/10/2015, 14:06
 
Fecha de Ingreso: junio-2010
Ubicación: Puebla, Pue.
Mensajes: 70
Antigüedad: 13 años, 10 meses
Puntos: 1
Pregunta Actualizar muchos registros entres 2 tablas MysQL y PHP

Hola compañeros, bueno, hoy me tomo el tiempo para preguntar por un problema que tengo desde hace algunos años y apenas se volvio retomar en donde trabajamos; Quisiera pedir su ayuda para que me orienten un poco, tratare de ser breve y claro:

En un callcenter hay un sistema PHP que maneja un tabla cartera con mas de 20 mil registros, de estos algunos registros son repartidos a varios usarios (unos 50 empleados) y en el transcurso del dia van trabajando con los registros (Cambiando estatus, consultando, ingresando comentarios, etc...)

Cada determinado tiempo llega el Archivo Excel para actualizar la cartera de la BD, y desde el sistema ya existe un modulo que importa la cartera a una tabla temporal y de ahi se hace un proceso de actualizacion desde un script PHP que hace actualmente esto:
  1. Toma cada registro de la tabla temporal y checa registro por registro en la tabla cartera
  2. Si ya existe, se hace un update de algunos datos en la tabla cartera
  3. Si al final no existe, hace un insert
  4. Se elemina el resgitro en la temporal
  5. Cuando se termina de recorrer toda la tabla temporal, se hace un update en caratera para dar de baja (cambiar un valor estatus) los registros que ya no llegaron en el excel

Como pueden ver se ejecutan muchos querys desde el script PHP al servidor.

Cuando se hace esta actualizacion el sistema se atora para todos los demas usarios hasta unos 40 minutos.

Me he percatado abriendo el phpmyadmin y actualizando la pagina que cuando se atora todo, NO se esta haciendo nada en la BD, sino que una vez que se desatora es cuando se empiezan a hacer los updates, intserts y deletes.

No se cual sea la manera mas eficiente o correcta para hacer este proceso?

De antemano gracias y ojala puedan ayudarme ;)
  #2 (permalink)  
Antiguo 29/10/2015, 14: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: Actualizar muchos registros entres 2 tablas MysQL y PHP

¿Y dicho procedimiento lo ejecutas desde la Web o desde la consola?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 29/10/2015, 15:30
 
Fecha de Ingreso: junio-2010
Ubicación: Puebla, Pue.
Mensajes: 70
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Hola, gracias.

Se ejecuta desde la web, con PHP hace un query para traer lo de la temporal, en el ciclo se ejecutan los UPDATES e INSERTS, todo desde PHP
  #4 (permalink)  
Antiguo 29/10/2015, 15:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Cita:
Se ejecuta desde la web
Pues el problema real es ese, si ejecutas un proceso largo desde web es natural que impida el acceso normal a otros usuarios: en definitiva una mala practica.

Lo correcto es que dichas operaciones las hagas con un proceso del sistema, no desde la web, para que así no molestes a nadie.

Te sugiero investigar más acerca de CRONjobs en sistemas *nix o tareas programadas si usas Windows.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 29/10/2015, 16:17
 
Fecha de Ingreso: junio-2010
Ubicación: Puebla, Pue.
Mensajes: 70
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Ok mil gracias ya voy viendo mas luz y si suponia que era una mala practica... si se mas o menos de CRON porque hemos programdo archivos PHP para que se ejecuten y hagan algunas tareas en la madrugada, como por ejemplo desasignar cuentas a los usuarios.

Tengo entonces una duda: ¿Ese proceso entonces se puede quedar en un archivo PHP y ejecutarlo con un CRON? Me refiero a que ¿desde el cliente puedo poner un boton para que ejecutar el CRON? (pregunto por que hay un empleado que puede actualizar su base en cualquier horario desde el sistema PHP)

¿Al ejecutar el CRON directamenete en el server entonces ya no deberia atorar a los demas usuarios?

No se como funcionen exactamente, pero en este caso ¿se pueden hacer procedimientos alamcenados? o es mas facil como me sugieres dejarlo en un script php y ejecutarlo con cron?
  #6 (permalink)  
Antiguo 29/10/2015, 16:36
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Saludo
Lo mejor es generar un script en php para la tarea,
y luego generar una tarea programada en el server
para que ejecute ese script cada cierto tiempo (Minutos, Horas, etc)

Incluso se puede crear un bat que servirá tanto para la tarea programada,
como para quien administre el server por sí quiere ejecutar
el bat manualmente.

Con esto incluso se asegura el proceso,
pues al empleado se le puede olvidar,
o n cosas pueden pasar.

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 29/10/2015, 16:50
 
Fecha de Ingreso: junio-2010
Ubicación: Puebla, Pue.
Mensajes: 70
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Gracias. Acreca de los BAT no se nada, si tendria que investigar para que sirven y como se hacen.

Aqui el usuario que importa y actualiza no tiene un dia y hora concreta para la actualizacion, podria hacerlo dos siguidos y despues no actualizar hasta dentro de una semana o mes.

Ya entendi que desde la web es el problema y por eso se atora, no me queda claro como entonces podria ejecutar dicho archivo PHP desde del sistema, tambien preguntaba si ¿esto se puede solucionar con procedimientos alamecenados o no es el caso?

saludos
  #8 (permalink)  
Antiguo 29/10/2015, 17:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Cita:
Aqui el usuario que importa y actualiza no tiene un dia y hora concreta para la actualizacion, podria hacerlo dos siguidos y despues no actualizar hasta dentro de una semana o mes.
El tema es que no necesariamente debes iniciar/detener dicho proceso cuando el usuario diga, sino que lo dejes funcionando todo el tiempo: aunque no haga nada.

Dentro de dicho proceso únicamente podrías verificar alguna condición, por ejemplo, que algún registro de la base de datos exista, o que algún archivo exista, etc.

Así lo único que haces desde la web es "disparar" dicho proceso activando la condición que desees.

El script verificará dicha condición y hará lo suyo, si no existe la condición pues no hará nada.

Usa tu ingenio.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 29/10/2015, 17:13
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Saludo
Pues investiga sobre los bats, no es complicado.

En cuanto a dejarlo en un procedimiento almacenado,
sí, podría ser otra opción pero obviamente implica
llevar la lógica que ya se tiene en el script a la bd.

En cuyo caso, yo me quedaría con el script,
y que el bat se encargue de llamarlo, y es
como sí se llamara desde la web, solo que ahora
no es una persona, sino es el sistema quien hace el llamado.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #10 (permalink)  
Antiguo 29/10/2015, 17:42
 
Fecha de Ingreso: junio-2010
Ubicación: Puebla, Pue.
Mensajes: 70
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Gracias pateketrueke y mortiprogramador, si ya me ha quedado claro que debe de ser un proceso en el sevidor, ya medio lei y los bat son ejecutables para windows, en mi caso es un server centos y seria con los archivos sh... aunque por el momento no se si sea lo mejor para mi caso...

Estoy empezando a confundirme un poco: si logro "disparar" un CRON para que ejecute un script php para mi proceso, no es lo mismo que cuando el usuario da submit para ejecutar un archivo php?

Perdon si digo algo un poco tonto pero no quiero que me queden dudas.

Si lo hago de todas maneras con un CRON ¿La forma en la que el script php hace el query para traer todo lo de la temporal, recorre, va comparando, hace updates e inserts en la otra tabla no atora de todas maneras el sistema?

¿O tal vez la forma en la que lo hace el script esta mal?
  #11 (permalink)  
Antiguo 29/10/2015, 18:45
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Actualizar muchos registros entres 2 tablas MysQL y PHP

Saludo
En respuesta a las dudas.
Sí, básicamente que el cron dispare el script es lo mismo
que el usuario llame al script desde la página, PERO
hay que tener en cuenta que cuando el usuario llama
desde la página, se tiene que esperar que el navegador
haga la petición al servidor, el servidor procese, y luego le
devuelva la respuesta al navegador.

En cambio, por bat o sh, se ejecuta y no se consumen
más recursos que los que gaste el script como tal,
es por eso que ese tipo de tareas grandes es más
recomendable dejarlas en un CRON.

Sugiero lo siguiente:
Hacer el CRON, y ver como se comporta al ser ejecutado
tanto la tarea, como el sistema para los usuarios,
y ver sí hay mejoras.

De lo contrario, se tiene que entrar a revisar de fondo
el script, y no solo eso, sino mirar también temas de
base de datos, que las tablas tengan índices para que
las búsquedas sean más rápidas, la manera en la que
se consulta un conjunto de datos ya en los querys, etc.

Así que eso puede crecerse bastante,
pero por ahora, empezar con el cron
y ver la evolución del tema es mi sugerencia.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: actualizacion, mysql, tablas
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 09:21.