¿Cómo se pueden implementar revisiones / control de versiones para datos de aplicaciones web?

Creo que WordPress almacena varias inputs de publicaciones como "revisiones", pero creo que es terriblemente ineficiente el uso del espacio.

¿Hay una mejor manera? Creo que gitit es una Wiki que usa GIT para el control de versiones, pero ¿cómo se hace? p.ej. mi aplicación está en PHP y debo hacerlo hablar con GIT para comprometer y recuperar datos?

Entonces, ¿cuál es una buena manera de implementar control de versiones en aplicaciones web (por ejemplo, en un blog podría ser el contenido de la publicación)

Recientemente implementé ese sistema, que usa el concepto de loggings reemplazados, junto con un enlace anterior y actual. Hice una cantidad considerable de investigación sobre la mejor manera de lograr esto: al final, el model al que llegué es similar al WordPress (y a otros sistemas), almacena los cambios como un nuevo logging y los utilizo.

Teniendo en count todas las opciones disponibles, el espacio es realmente la última preocupación para el contenido escrito, como las publicaciones: los files multimedia ocupan mucho más espacio y, de todos modos, no se pueden almacenar como deltas.

En cualquier caso, la forma en que funciona Git es prácticamente idéntica, ya que almacena todo el contenido para cada revisión, excepto que eventualmente se empaquetará en deltas (o cuando se lo pida).

Git Storage Object graph

Volviendo a 1990, estábamos usando SCCS o RCS y, a veces, con solo 30 MB de espacio libre en disco, realmente necesitábamos que el control de versiones fuera eficiente para evitar quedarse sin almacenamiento.

El uso de deltas para ahorrar espacio no vale realmente la agravación asociada dada la cantidad promedio de almacenamiento disponible en los sistemas modernos. Se podría argumentar que es un desperdicio de espacio, sin embargo, yo diría que es mucho más eficiente a largo ploop almacenar cosas sin comprimir en su forma original.

  • es mas rapido
  • es más fácil search en versiones anteriores
  • es más rápido de ver
  • es más fácil saltar a la mitad de un set de cambios sin tener que procesar muchos deltas.
  • es mucho más fácil de implementar porque no tiene que escribir algorithms de generación delta.

Además, el marcado no funciona tan bien como el text sin formatting con deltas, especialmente cuando se edita con un editor wysiwyg.

Mantenga una tabla con la versión más reciente del artículo eg.

Cuando se guarda una nueva versión, mueva la stream en una tabla de file y coloque un número de versión manteniendo la versión más reciente en la primera tabla.

La tabla de file puede tener la propiedad ROW_FORMAT = COMPRESSED (ejemplo de MySQL InnoDb) para ocupar less espacio y no será un problema de performance, ya que rara vez se accede a él. Sí, es un poco sobrecarga no solo almacenar sets de cambios, pero si haces algunos cálculos puedes mantener una gran cantidad de revisiones en casi ningún espacio, ya que tus artículos son text altamente comprimible de todos modos.

En el ejemplo, el código fuente de esta página entera está comprimido en 11Kb. Eso le da casi 100 versiones en 1Mb. En comparación, los artículos normales son bastante más pequeños y, en promedio, le pueden dar 500-1000 artículos / versiones en 1Mb. Usted probablemente puede permitirse eso.