2010-08-05 11 views
12

Questo mi è sempre rimasto nella mente, quindi immagino che potrei anche andare avanti e chiedere.In che modo una wiki gestisce più modifiche simultanee?

In che modo un wiki gestisce più modifiche sullo stesso contenuto?

Ecco un esempio semplicistico di ciò che sto chiedendo. Diciamo che una pagina ha il seguente contenuto:

Sono una pagina!

E ora diciamo che due vanno a modificare quella pagina. Ogni persona aggiunge una frase:

persona:

Sono una pagina!
Sono una seconda frase nella stessa pagina!

persona due:

Sono una pagina!
Sono una seconda frase!

Immaginate seconda frase, di ogni persona di essere un fatto ugualmente rilevanti ma differenti sul tema della pagina che ogni persona ha voluto aggiungere.

Ora diciamo che la persona ci si sottomette loro modifiche prima persona due fa, ma la persona due non ha nemmeno la possibilità di vedere i cambiamenti fatti da quella persona. I cambiamenti della persona due sovrascrivono quelli della persona uno quando finalmente va a presentare?

Esiste un algoritmo di diff/merge che potrebbe essere utilizzato per questo?

+0

hehe i rischi di dati della programmazione simultanea sono sempre divertenti :) –

risposta

8

Credo che Wikipedia usi l'algoritmo a fairly simple diff/merge, simile a come la maggior parte del software di controllo del codice sorgente lo fa.

Nell'esempio che hai fornito, si genera un errore di conflitto di unione, perché non c'è modo di sapere quale riga deve venire prima nel markup finale. La seconda persona a cui salvare le modifiche verrà presentata con una pagina di errore di unione in cui devono scegliere come risolvere il conflitto.

Tenere presente, tuttavia, che wikipedia si trova nella fascia alta della scala di utenti simultanei.Per la maggior parte dei wiki, sarebbe probabilmente accettabile utilizzare un algoritmo "last save wins" molto semplice, in cui le modifiche della seconda persona sovrascrivono semplicemente quelle della prima persona. Con l'aggiunta della cronologia, dovrebbe essere facile per la prima persona individuare che le loro modifiche sono state sovrascritte e aggiungerle di nuovo.

Credo che questa soluzione sia quella utilizzata da Stack Overflow. SO ha una funzione aggiuntiva in cui viene utilizzata una chiamata Ajax per notificare l'editor se qualcun altro entra e modifica la pagina prima che siano finiti.

1

Potrebbe esserci un meccanismo transazionale che utilizza il blocco per impedire la modifica di un file due volte. Vedi file locking su Wikipedia.

2

Dipende dal sapore della wiki. Ci sono molte dozzine o centinaia di cloni wiki. In genere il secondo utente riceverà un messaggio di errore "questa pagina è stata modificata da un altro utente", quindi dovranno ricaricare la pagina e ripetere le modifiche.

Un wiki può certamente unire le due modifiche nello stesso modo in cui funziona un sistema di controllo della versione come Subversion. Se si ha familiarità con il comando UNIX patch, ciò implicherebbe la modifica di utente 2 e la generazione di una patch che viene quindi applicata. La patch può o non può avere successo; nel tuo esempio ci sarebbe un conflitto di fusione, e quindi sarebbe tornato al vecchio messaggio di errore "questa pagina è stata modificata da un altro utente, si perde".

1

In che modo una wiki gestisce più modifiche simultanee?

Dipende dall'implementazione del wiki.

Esiste un algoritmo di diff/merge che potrebbe essere utilizzato per questo?

Qualsiasi algoritmo di unione che soddisfi i requisiti dell'utente.

Generalmente dipende dal comportamento che ti piace avere nella wiki. Ad esempio, puoi scegliere di implementare la tua wiki in modo tale che la modifica di Person Two non venga commessa in quanto l'articolo è stato modificato e la Persona Due sta lavorando su una copia base obsoleta. Potenzialmente la Persona Due entrerebbe in qualcosa di completamente diverso se fosse a conoscenza dei cambiamenti. In tal caso, è possibile scegliere di non consentire il commit delle modifiche di Person Two. Questo può essere ottenuto con il meccanismo transazionale che Kurt Du Bois menziona nella sua risposta.

Un'altra opzione sarebbe quella di implementare un approccio che consente sempre il salvataggio dell'articolo wiki. In questo caso potresti perdere le modifiche di Person One mentre nel primo approccio perderai le modifiche di Person Two.

Un terzo approccio consiste nel presentare entrambi gli articoli affiancati in una finestra di unione. Non sono a conoscenza di un wiki che supporti questo. Se lo fosse, mi chiedevo cosa sarebbe successo se, in coincidenza, tre (o più) persone stavano modificando lo stesso documento.

Quindi, se si utilizza una wiki, suggerirei di mantenere le modifiche piccole.

Se stai implementando una wiki, puoi scegliere come comportarti con il tuo sistema wiki.