Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/05/2008, 17:30
javierav
 
Fecha de Ingreso: noviembre-2007
Ubicación: Córdoba
Mensajes: 70
Antigüedad: 16 años, 6 meses
Puntos: 1
Pregunta Impedir que dos procesos accedan al mismo tiempo a una tabla

Hola.

En un proyecto que estoy realizando necesito generar una cadena del tipo de la id de los vídeos de YouTube (v15Kj001S4t8xRP) que será almacenada en una tabla como id de un archivo. Dado que va a ser la id que identifique a ese archivo en la tabla, no puede existir ningún duplicado. La forma simple de hacerlo es generar una id nueva por cada archivo nuevo, ver si existe ya una en la base de datos, si existe crear una nueva y repetir la comprobación (así hasta que no exista) y si no existe pues esa que se ha generado es válida. Al principio lo normal será que no existan muchos registros, por lo que la posibilidad de hallar repetidas será inferior. Pero con el paso del tiempo, y sobre todo si se prevee que se insertarán muchos archivos, la probabilidad de hallar coincidencias será cada vez mayor, lo que supondría perdida de tiempo hasta generar una clave que no exista.

Para evitar eso he pensado en tener un proceso aparte que vaya generando claves que no existan para tenerlas a punto cuando deba usarse alguna para un nuevo archivo. Esas claves irían almacenadas en una tabla de MySQL. Pero el problema viene cuando yo le digo a MySQL: "oye, dame la siguiente clave disponible que tengas en la lista". Desde que yo realizo la consulta SELECT para obtener la clave hasta que vuelvo a realizar la consulta DELETE para borrar esa clave por que ya ha sido usada, existe un intervalo de tiempo en el que otra petición podría decirle a MySQL que le de una clave disponible y MYSQL, como sigue teniendo ese registro ahí, pues darle la misma clave: y ya la tenemos liada.

¿De que forma podría yo hacer esa consulta? ¿Transacciones? ¿Bloqueo de tabla? No tengo ni idea de esas cosas. Gracias y perdón por el tocho.

Saludos.
__________________
http://www.javierav.com