Domanda

Ho una domanda sul blocco. Questo non deve riguardare solo il blocco dei record, ma comunque.

Diciamo che sto scrivendo un CMS accessibile dal web. Sto lottando con alcune idee.

Potrei, nel momento in cui un utente apre un articolo per la modifica, contrassegnarlo come "in uso". finora tutto bene.

ma quando rimuovo il flag? quando l'utente salva l'articolo? ma cosa succede se l'utente non ha più voglia di scrivere e decide di chiudere il browser e andare a letto?

mi viene in mente un meccanismo di timeout, ma quanto tempo ci vuole per scrivere un articolo? 10 minuti troppo corti, 30 minuti troppo lunghi ..

Forse sto complicando troppo questo. Mi piacerebbe sentire le tue opinioni su questo argomento.

È stato utile?

Soluzione

Perché non usare i timestamp? Non preoccuparti di bloccare nulla, reagisci semplicemente all'evento in cui il record (articolo) è cambiato.

Fondamentalmente, prima di salvare l'articolo, controlla se la tua versione (timestamp) è la stessa di quella sul disco. Se è lo stesso, hai ancora l'ultima copia, quindi scrivila, se non poi ... offri di unire, offri di salvare come nuovo, scartalo - specifico per la sua applicazione.

Altri suggerimenti

Il mio voto è per blocco ottimistico ove possibile.

In un punto, dove ho implementato i blocchi effettivi, avevo una pagina di amministrazione per rimuovere i blocchi. C'era anche un servizio in esecuzione sul server per sbloccare tutti i blocchi che non avevano una sessione attiva corrispondente.

Usa rowversion per mssql 2005 e successivi, timestamp per mssql 2000 e precedenti. Usa il campo xmin nascosto per postgresql.

Consenti a tutti gli altri utenti di aprire il record. Oltre a salvare il record, taggare chi lo ha salvato e con l'aiuto di Rowversion, in modalità catch (DbConcurrencyException), è possibile ripetere un errore che indica agli altri utenti che hanno salvato il record prima di farlo e richiedere loro di riaprire il record per vedere le modifiche apportate dall'utente che ha salvato per primo il record.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top