Control de usuarios concurrentes en PHP + MySQL

  • Autor Autor Brandon Díaz
  • Fecha de inicio Fecha de inicio
Brandon Díaz

Brandon Díaz

Lambda
SEO
Verificación en dos pasos activada
Verificado por Whatsapp
Bueno lanzo mi pregunta para los programadores de php que hay en este foro a ver si alguno me puede ayudar

Estoy desarrollando un sistema que tendra algunos usuarios concurrentes, es decir, que estaran usando la aplicacion al mismo tiempo para los mismos fines.

El problema es que mientras uno hace un update el otro puede haber hecho antes un delete... O si alguien hace un select puede que alguien haya hecho antes un update...

Como todos trabajaran con la misma informacion es muy probable.

¿Hay alguna manera de minimizar estos riesgos en la informacion?

Se me ocurria hacer uso de transacciones, commits, rollbacks y demas, pero no se si sea una buena idea o si sea la mejor.

¿Alguien que pueda echarme una mano?

gracias!
 
Yo sugiero que cada usuario tenga su propia fila en la bd y asi solo manipulan la suya , o es importante manipular solo una?
 
Que tengan su propia fila en la BD?

😵 no entiendo que quieres decir
 
Que tengan su propia fila en la BD?

😵 no entiendo que quieres decir

Igual estaria bueno que detalles un poco mas...la estructura de la tabla que querés usar estaría bien (para ver si se puede optimizar o usar de otra manera mas 'eficiente')

Depende mucho de lo que quieras hacer...pero yo creo que se puede aguantar bien usuarios concurrentes...y lo de chequear si alguien hizo un 'delete' o lo que fuere antes...depende de los chequeos en php....siempre hay que chequear que una fila exista antes de editarla o detectar que alguien actualizó los datos antes de re-editarlos (usando algun backend en ajax por ejemplo)
 
Igual estaria bueno que detalles un poco mas...la estructura de la tabla que querés usar estaría bien (para ver si se puede optimizar o usar de otra manera mas 'eficiente')

Depende mucho de lo que quieras hacer...pero yo creo que se puede aguantar bien usuarios concurrentes...y lo de chequear si alguien hizo un 'delete' o lo que fuere antes...depende de los chequeos en php....siempre hay que chequear que una fila exista antes de editarla o detectar que alguien actualizó los datos antes de re-editarlos (usando algun backend en ajax por ejemplo)

Es que no importa mucho la estructura de la tabla. Imagina una tabla X.

Hay diez usuarios conectados al mismo tiempo actualizandola, agregandole y quitandole datos.

Como prevenir que haya esos problemas de informacion? Que uno no agregue un dato mientras que otro ya lo quito hace un segundo?
 
es casi imposible eso, ya que para preparar una consulta, la db verificara y lanzara los errores del caso

si un usuario hace un update en milisegundo despues que otro usuario lo elimino la manera correcta de hacerlo en php seria asi

PHP:
$test = mysql_query("select campo from tutabla where id = '1000'");

if(mysql_num_rows($test) > 0){

//si el dato no ah sido borrado, (existe) updatea

mysql_query("update tutabla set campo = 'forobeta' where id = '1000'");

}else{

//hey ya no existe el fucking dato

}
 
es casi imposible eso, ya que para preparar una consulta, la db verificara y lanzara los errores del caso

si un usuario hace un update en milisegundo despues que otro usuario lo elimino la manera correcta de hacerlo en php seria asi

PHP:
$test = mysql_query("select campo from tutabla where id = '1000'");

if(mysql_num_rows($test) > 0){

//si el dato no ah sido borrado, (existe) updatea

mysql_query("update tutabla set campo = 'forobeta' where id = '1000'");

}else{

//hey ya no existe el fucking dato

}

Vaya lio con el codigo extra, seguramente aumentara mi trabajo... Pero pues tampoco se me ocurre otra manera

Gracias alucard! je
 
Me hiciste acordar los viejos tiempos en que habia que bloquear los ficheros para evitar machacado de datos

busca en Google LOCK_TABLES
 
Vaya lio con el codigo extra, seguramente aumentara mi trabajo... Pero pues tampoco se me ocurre otra manera

Gracias alucard! je

A lo que me referia es que no es necesario liarte con todo eso, si no que cada usuario tenga sus datos generales que son los que se iran actualizando es decir si quieres contar mensajes totales de todos los usuarios, no es necesario poner el numero de mensajes en una fila de una tabla en la bd
es decir asi :
id mensajes
--- -------------
1 201

Imagina que lo que entendi es que los usuarios conectados por seguir mi ejemplo , estaran actualizando el numero de mensajes totales en el sitio, asi si alguien elimina un mensaje debes restarlo , pero si al mismo tiempo otro agrega otro puede que la consulta se realize mal o no encuentre la fila, a eso es lo que creo que te refieres y a lo que me refiero yo es que haya una fila para cada usuario quedando asi:
id mensajes
--- -------------
1 10
2 3
3 4

Y al final con php los sumas, y asi muestras hay un total de $suma en donde suma sera el total de todos los mensajes que existan en general.
Asi si un usuario modifica un dato se modificara solo su fila y no afectara lo que hagan los demas usuarios. Eso que pensaste ya estuvo pensado por miles de programadores y esa es la mejor solucion.

Un saludo!
 
Atrás
Arriba