2010-08-05 18 views
12

Esto siempre ha estado presente en mi mente, así que supongo que debo seguir y preguntar.¿Cómo maneja una wiki varias ediciones simultáneas?

¿Cómo maneja una wiki las ediciones múltiples en el mismo contenido?

Aquí hay un ejemplo simplista de lo que estoy preguntando. Supongamos que una página tiene el siguiente contenido:

Soy una página!

Y ahora digamos que dos van a editar esa página. Cada persona añade una frase:

Persona uno:

Soy una página!
¡Soy una segunda oración en la misma página!

persona dos:

Soy página!
¡Soy una segunda oración!

Imagínese segunda frase de cada persona es un hecho igualmente relevantes pero diferente sobre el tema de la página que cada persona quería añadir en.

Ahora digamos que esa persona uno se somete sus cambios antes de persona dos hace, pero la persona dos ni siquiera tiene la oportunidad de ver los cambios que esa persona hizo. ¿Los cambios de la persona dos sobrescriben los de la persona uno cuando finalmente va a enviar?

¿Hay algún algoritmo de diferencias/fusión que pueda usarse para esto?

+0

hehe concurrency los riesgos de datos de programación son siempre divertidos :) –

Respuesta

8

Creo que Wikipedia usa el algoritmo a fairly simple diff/merge, similar a cómo lo hace la mayoría del software de control de código fuente.

En el ejemplo que proporcionó, se generaría un error de conflicto de fusión, porque no hay forma de que sepa qué línea debe aparecer primero en el marcado final. La segunda persona que guarde sus cambios se presentará con una página de error de fusión donde tendrán que elegir cómo resolver el conflicto.

Tenga en cuenta, sin embargo, que la wikipedia está en el extremo superior de la escala de usuarios simultáneos.Para la mayoría de los wikis, probablemente sería aceptable usar un algoritmo muy simple de "última salvación gana", donde las ediciones de la segunda persona simplemente sobrescriben las de la primera persona. Con la adición de historial, debería ser fácil para la primera persona detectar que sus cambios han sido sobrescritos y volver a agregarlos.

Creo que esta solución es lo que utiliza Stack Overflow. SO tiene una característica adicional donde se usa una llamada Ajax para notificar al editor si alguien más entra y modifica la página antes de que haya terminado.

1

Podría haber un mecanismo transaccional que utiliza el bloqueo para evitar que un archivo se edite dos veces. Ver file locking en Wikipedia.

2

Depende del sabor de la wiki. Hay muchas docenas o cientos de clones wiki. Normalmente, el segundo usuario recibirá un mensaje de error "esta página ha sido editada por otro usuario" y luego deberá volver a cargar la página y rehacer sus ediciones.

Un wiki ciertamente podría fusionar las dos ediciones juntas de la misma manera que lo hace un sistema de control de versiones como Subversion. Si está familiarizado con el comando UNIX patch, implicaría modificar la edición del usuario 2 y generar un parche que luego se aplicará. El parche puede o no tener éxito; en su ejemplo, habría un conflicto de fusión, por lo que volvería al antiguo mensaje de error "esta página ha sido editada por otro usuario, se pierde".

1

¿Cómo maneja una wiki varias ediciones simultáneas?

Eso depende de la implementación de la wiki.

¿Existe algún algoritmo de diferencias/fusión que pueda utilizarse para esto?

Cualquier algoritmo de fusión que cumpla con sus requisitos lo hará.

En general, depende del comportamiento que le guste tener en la wiki. Por ejemplo, puede optar por implementar su wiki de tal manera que el cambio de Persona Dos no se comprometa ya que el artículo ha sido modificado y la Persona Dos está trabajando en una copia base desactualizada. Potencialmente, la Persona Dos entraría en algo completamente diferente si él o ella estuviera al tanto de los cambios. En ese caso, puede optar por no permitir la realización de cambios de Persona Dos. Esto se puede lograr con el mecanismo transaccional que Kurt Du Bois menciona en su respuesta.

Otra opción sería implementar un enfoque que siempre permita guardar el artículo de la wiki. En este caso, puede perder los cambios de la Persona Uno, mientras que en el primer enfoque perdería los cambios de la Persona Dos.

Un tercer enfoque sería presentar ambos artículos uno al lado del otro en una ventana de fusión. No estoy al tanto de una wiki que apoye esto. Si lo hiciera, me preguntaba qué sucedería si, coincidentemente, tres (o más) personas están modificando el mismo documento.

Así que si está utilizando una wiki, le sugiero que mantenga las ediciones pequeñas.

Si está implementando una wiki, puede elegir cómo quiere que se comporte su sistema wiki.

Cuestiones relacionadas