Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   2 Aplicaciones Escribiendo Informaciòn en servidor [evitar choques] (https://www.clubdelphi.com/foros/showthread.php?t=53513)

chrids506 22-02-2008 16:28:35

2 Aplicaciones Escribiendo Informaciòn en servidor [evitar choques]
 
Saludos, mi preguntas es como evitar que 2 usuarios estén modificando un archivo al mismo tiempo en el servidor, me explico,
estoy desarrollando una aplicación en delphi que crea un archivo xml y 6 archivos de imágenes y luego las sube al servidor, hasta aquí todo bien, pero quiero evitar que 2 personas estén trabajando en un mismo fichero al mismo tiempo para evitar reescrituras y demás, cual es la forma mas viable de evitarlo?

Gracias, no estoy seguro de haberme explicado lo mejor posible, si tienen alguna duda me preguntan

AzidRain 22-02-2008 16:44:05

Pues no sé si sea lo mejor pero al final siempre cae uno en el viejito (pero efectivo) sistema de bloqueos. Si el usuario A abre para modificación el registro X, se crea un bloqueo en un archivo de bloqueos, entonces si otro usuario desea modificar el mismo registro primero se verifica que no haya un bloqueo activo para ese registro, de lo contrario solo puede consultarlo. Lo que no puede evitarse es que el usuario A modifique algo y guarde (liberando el bloqueo) y luego el usuario B modifique el mismo registro segundos después, perdiéndose lo que había cambiado A.

chrids506 22-02-2008 16:55:10

Cita:

Empezado por AzidRain (Mensaje 267871)
Pues no sé si sea lo mejor pero al final siempre cae uno en el viejito (pero efectivo) sistema de bloqueos. Si el usuario A abre para modificación el registro X, se crea un bloqueo en un archivo de bloqueos, entonces si otro usuario desea modificar el mismo registro primero se verifica que no haya un bloqueo activo para ese registro, de lo contrario solo puede consultarlo. Lo que no puede evitarse es que el usuario A modifique algo y guarde (liberando el bloqueo) y luego el usuario B modifique el mismo registro segundos después, perdiéndose lo que había cambiado A.

Esto se podría evitar denegándole el permiso de lectura también a B, así cuando lo lea lo va a leer corregido, ahora si el programa A tiene un inconveniente y no retira el bloqueo? bueno, se me ocurre que escriba la hora del bloqueo y que esta expire a los 30 min, hasta acá todo bien, ahora como evito que los 2 gestionen el permiso al mismo tiempo?

ContraVeneno 22-02-2008 20:26:19

No se yo, pero 30 minutos de vigencia para un bloqueo es una eterninidad... hasta 1 minuto me parece exagerado.

Y según mi novato punto de vista, es practicamente imposible gestionar un bloqueo al mismo tiempo, (mismo día, misma hora, mismo minuto, mismo segundo, misma centésima de segundo, misma milésima de segundo).

chrids506 22-02-2008 20:37:11

Cita:

Empezado por ContraVeneno (Mensaje 267952)
No se yo, pero 30 minutos de vigencia para un bloqueo es una eterninidad... hasta 1 minuto me parece exagerado.

Y según mi novato punto de vista, es practicamente imposible gestionar un bloqueo al mismo tiempo, (mismo día, misma hora, mismo minuto, mismo segundo, misma centésima de segundo, misma milésima de segundo).

Pero puede pasar, pero bueno, es viable, lo del bloqueo de 30 min es solo si se da una cosa fuera de lo normal, como que se caiga el programa y no quite el bloqueo, es para cubrir todas las bases , en otro caso el bloqueo durará el tiempo que el usuario esté modificando el archivo, osea al darle click a salvar se va a levantar el bloqueo, que se logra con eso? que nadie este modificando el mismo archivo y se pierda tiempo, como lo ven ustedes?

AzidRain 25-02-2008 01:40:26

Esa clase de problemas son los que nos vinieron a solucionar los motores de bases de datos quienes alegremente se encargan de gestionar toda clase de cosas que antes teníamos que hacer a mano, solo que en este caso no se trata de bases de datos. Coincido en que un bloqueo de 30 minutos es una eternidad. De hecho el bloqueo es justo antes de la actualización por lo que no debería pasar de algunos segundos.

chrids506 25-02-2008 15:43:30

Gracias a todos por sus respuestas, lo tomaré en cuenta


La franja horaria es GMT +2. Ahora son las 20:35:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi