Gestione o prevenzione di conflitti in un sistema multiutente

3

Ho un'applicazione web a cui si accede da più utenti da diverse località in tutto il mondo. Diciamo che ho un modulo "modifica" per un documento specifico e due (o più) utenti stanno modificando il documento allo stesso tempo. So che entrambi gli utenti possono modificare il documento e inviarlo, ma user1 non vedrà che l'utente2 ha apportato modifiche al documento e potrebbe presentare una versione precedente di esso.

Stavo pensando di aggiungere un qualche tipo di blocco, ma poi, se user1 ha solo aperto il documento per la modifica, ma non ha mai cambiato nulla (e lo ha tenuto aperto) user2 non sarà mai in grado di modificarlo. Pertanto, stavo pensando di aggiungere un timeout per l'editor, ma l'utente 1 potrebbe scadere prima di aver completato le sue modifiche al documento (diciamo, è uscito per il lancio).

La domanda è: in che modo si impedisce che il documento venga modificato da un utente mentre l'altro lo modifica?

Nota: se questa domanda non è qui, per favore spiega perché e dove potrei fare una domanda del genere.

    
posta Dementic 12.08.2013 - 00:21
fonte

1 risposta

4

Le basi per implementare la concorrenza ottimistica non sono così difficili.

Per prima cosa, avrai bisogno di un modo per identificare una riga (o una serie di righe) nel tuo database (pensa al numero di versione).

In secondo luogo, quando l'applicazione carica i dati che il tuo utente può rivedere o modificare, carica anche la versione dei dati (vedi sopra).

In terzo luogo, quando l'utente va a salvare le proprie modifiche, è necessario assicurarsi che la versione dei dati che stanno cambiando corrisponda alla versione dei dati esistente nel database. Se i numeri di versione non corrispondono, aumenterai e gestirai una sorta di eccezione di dati obsoleti.

    
risposta data 12.08.2013 - 00:43
fonte

Leggi altre domande sui tag