almacenar cambios de revisión de un post

¿Qué algorithms y processs están involucrados en el almacenamiento de cambios de revisión como stackoverflow y wikipedia do?

¿Se guarda solo una copy del post? Y si es así, ¿es solo la última copy? Entonces, ¿solo se almacenan desde allí los cambios para volver a las versiones anteriores? (Esto haría una visualización más rápida del post principal). ¿O están completos los posts? Y si es así, ¿se hace la comparación entre estos en cada pantalla?

¿Qué algorithms se usan mejor para determinar los cambios exactos en el post? ¿Cómo se almacenan estos datos en una database?

Si alguien sabe exactamente qué wikipedia o stackoverlfow me encantaría saber.

El algorithm de subcadena común más largo se puede usar para detectar diferencias entre versiones, pero es limitado. Por ejemplo, no detecta el movimiento del text como tal, pero vería esto como eliminaciones e inserciones no relacionadas.

Supongo que los sitios web normalmente almacenan la última copy en su totalidad, y aplican difs revertidos desde allí. Esta es también la forma en que funciona CVS , pero Subversion usa diffs de avance, lo que resulta en loggings más lentos.

Para almacenar esto en una database, uno podría mantener una tabla principal con las últimas versiones, y tener una tabla separada con las diferencias inversas. Esta tabla tendría filas en el formatting (article_id, revision_id, differences) .

Mediawiki (el software para wikipedia) almacena el text completo para todas las revisiones, vea el esquema de la database . Cada input en la tabla de text en Mediawiki tiene indicadores que indican si el contenido ha sido p.ej. gziped, el uso de una compression estándar suele ser la opción más segura.

No puedo decirte cómo hacer las diferencias algorítmicamente, pero cualquiera que sea el algorithm que uses debes hacerlo a partir de dos versiones completas del text. Eso es get la versión completa del object viejo y nuevo de la database luego hacer la diferencia. Esto hace que sea posible cambiar fácilmente el algorithm de diferencia.

Git es un gran ejemplo de una aplicación Unix que puede hacer un almacenamiento delta muy barato (almacenamiento y velocidad). Hay wikis que pueden usar git eg ikiwiki , pero supongo que quieres hacerlo con una database.

Por lo general, los posts se almacenan como instantáneas completas. Las versiones anteriores están desactivadas y se muestra la más reciente. Puede haber optimizaciones utilizadas, como el almacenamiento en caching, cuya versión es la más reciente.

Los cambios de revisión típicos se almacenan usando un algorithm delta, por lo que los únicos datos almacenados son los cambios en cada revisión en relación con el original. No estoy seguro de wikipedia o stackoverflow cómo lo han implementado.

Usaría la siguiente técnica:

  • Almacene el post actual como text completo.
  • Almacene el historial usando el algorithm delta.

Esto mantendrá su performance bueno con la visualización regular, mientras mantiene el almacenamiento al mínimo para el historial.

La respuesta aceptada es bastante mala .. Problemas:

  • lento
  • no a testing de futuro
  • Complicado