Foros del Web » Programando para Internet » PHP »

Procesos en paralelo y bloqueo de tablas

Estas en el tema de Procesos en paralelo y bloqueo de tablas en el foro de PHP en Foros del Web. Hola como estan... Necesito hacer un select en una tabla y si no se encuentran resultados hacer un update en otra, mi duda surge porque ...
  #1 (permalink)  
Antiguo 06/05/2008, 10:34
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 20 años, 6 meses
Puntos: 24
Procesos en paralelo y bloqueo de tablas

Hola como estan...

Necesito hacer un select en una tabla y si no se encuentran resultados hacer un update en otra, mi duda surge porque podrian recibirse multimples peticiones y algua de ellas podrian caer en el mismo instante. Supongamos que dos procesos hagan el select al mismo tiempo, si eso pasa las dos me van a hacer un update de la otra tabla y eso es lo que no quiero. Habia pensado en bloquear la primera tabla (la del select) hasta que ese proceso termine pero me surge la duda de que pasaria con el otro proceso, daria un menaje de error ?
  #2 (permalink)  
Antiguo 06/05/2008, 18:39
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Procesos en paralelo y bloqueo de tablas

Pues deberías usar transacciones entonces
Así, podés lograr que el select y el update se ejecuten como una sola consulta.

Podés leer mi artículo al respecto o, si no te gusta que me haga autopromoción podés buscar en tu buscador favorito: "transacciones con php" o similar.

Dependiendo de la lógica de tu aplicación, podría ser un problema que se arregle con un condicional puesto en el lugar adecuado, pero las transacciones son una buena costumbre


Saludos.
  #3 (permalink)  
Antiguo 09/05/2008, 15:58
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 20 años, 6 meses
Puntos: 24
Re: Procesos en paralelo y bloqueo de tablas

Hola alvlin !
Habia leido algo sobre transacciones antes de preguntar, me solucionaba el tema de la interidad de datos pero no sabia que pasaba con otros procesos que podian correr en paralelo (pensaba que podian generar menajes de error) y por suerte en tu artículo encontre un par de lineas esclarecedoras sobre el tema:
"Cualquier consulta que tenga que ver con los mismos datos será demorada hasta que la transacción termine."
Y con eso tambien tengo el porque se dice que innoDB es mas lento...

Gracias por todo, excelente el autobombo ;)
  #4 (permalink)  
Antiguo 09/05/2008, 18:40
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Procesos en paralelo y bloqueo de tablas

Bueno pues en realidad no es tanto por eso... dado que InnoDB bloquea las filas afectadas, pero MyISAM bloquea la tabla entera
InnoDB es un motor más complejo y completo que MyISAM, hace muchas comprobaciones que lo pueden hacer más lento, pero cuando se trata de la integridad de los datos a veces la velocidad se puede dejar un poco en segundo plano.
Igual muchos de los paquetes de software en PHP (Wordpress, por ejemplo) usan tablas MyISAM, así que tan malas no son....

Los artículos relacionados de la wikipedia son excelentes puntos de partida :)


Saludos.
  #5 (permalink)  
Antiguo 10/05/2008, 09:43
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 20 años, 6 meses
Puntos: 24
Re: Procesos en paralelo y bloqueo de tablas

Cita:
Iniciado por alvlin Ver Mensaje
Bueno pues en realidad no es tanto por eso... dado que InnoDB bloquea las filas afectadas, pero MyISAM bloquea la tabla entera
InnoDB es un motor más complejo y completo que MyISAM, hace muchas comprobaciones que lo pueden hacer más lento, pero cuando se trata de la integridad de los datos a veces la velocidad se puede dejar un poco en segundo plano.
Igual muchos de los paquetes de software en PHP (Wordpress, por ejemplo) usan tablas MyISAM, así que tan malas no son....

Los artículos relacionados de la wikipedia son excelentes puntos de partida :)


Saludos.
mmm y que pasa cuando estoy haciendo un count()? bloquea toda la tabla ?
Yo hago una consulta Select para ver si hay registros en una tabla y si NO hay se desatan las otras consultas por eso queria impedir que se hagan otras consultas asta que termine la ultima. Supongo que en un count deberia bloquear toda la tabla

Wordpress las usa ? aha, pero supongo que deben tenerlo muy en cuenta a la hora de progamar, seguro tendran una forma de trabajar para asegurar la integridad de datos porque no es nada alocado que un sevidor se caiga y queden consultas a la mitad.

Estuve viendo que Magento usa innoDB en todas menos en las de log aunque si a la hora de instalarlo no esta habilitado crea todas talbas MyISAM, supongo que tener problemas de interidad en una tienda puede ser complicado.
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 14:49.