2 Stimmen

Wie können Revisionen/Versionskontrolle für die Daten von Webanwendungen implementiert werden?

Ich glaube, Wordpress speichert mehrere Einträge von Beiträgen als "Revisionen", aber ich denke, das ist furchtbar ineffiziente Nutzung von Speicherplatz?

Gibt es einen besseren Weg? Ich denke gitit ist ein Wiki, das GIT für die Versionskontrolle verwendet, aber wie wird das gemacht? z.B. meine Anwendung ist in PHP und ich muss sie mit GIT kommunizieren lassen, um Daten zu übertragen und abzurufen?

Was ist also eine gute Möglichkeit, die Versionskontrolle in Webanwendungen zu implementieren (z. B. in einem Blog könnte es der Inhalt eines Beitrags sein)?

12voto

Richard Harrison Punkte 18867

Ich habe vor kurzem ein solches System implementiert, das das Konzept der überholten Datensätze zusammen mit einem früheren und einem aktuellen Link verwendet. Ich habe lange recherchiert, wie man dies am besten erreichen kann. Letztendlich bin ich zu einem Modell gekommen, das dem von Wordpress (und anderen Systemen) ähnelt - die Änderungen werden als neuer Datensatz gespeichert und dieser verwendet.

In Anbetracht aller verfügbaren Optionen ist der Speicherplatz wirklich das letzte Problem bei selbst erstellten Inhalten wie Beiträgen - Mediendateien benötigen viel mehr Platz und können ohnehin nicht als Deltas gespeichert werden.

In jedem Fall ist die Funktionsweise von Git praktisch identisch, da es den gesamten Inhalt jeder Revision speichert, mit der Ausnahme, dass es schließlich in Deltas verpackt wird (oder wenn Sie es wünschen).

Git Storage Object graph

Bis 1990 benutzten wir SCCS oder RCS, und manchmal, wenn nur 30 MB freier Speicherplatz zur Verfügung standen, musste die Versionskontrolle wirklich effizient sein, damit der Speicherplatz nicht ausging.

Die Verwendung von Deltas, um Platz zu sparen, ist angesichts des durchschnittlich verfügbaren Speicherplatzes auf modernen Systemen den damit verbundenen Aufwand nicht wirklich wert. Man könnte argumentieren, dass es Platzverschwendung ist, aber ich würde sagen, dass es langfristig viel effizienter ist, Dinge unkomprimiert in ihrer ursprünglichen Form zu speichern

  • es ist schneller
  • es ist einfacher, alte Versionen zu durchsuchen
  • es ist schneller zu sehen
  • Es ist einfacher, mitten in eine Reihe von Änderungen hineinzuspringen, ohne eine Menge Deltas verarbeiten zu müssen.
  • Es ist viel einfacher zu implementieren, weil man keine Algorithmen zur Deltagenerierung schreiben muss.

Außerdem lassen sich Markups nicht so gut mit Deltas versehen wie normaler Text, vor allem nicht bei der Bearbeitung mit einem Wysiwyg-Editor.

2voto

jornare Punkte 2873

Behalten Sie eine Tabelle mit der aktuellsten Version des Artikels.

Wenn eine neue Version gespeichert wird, verschiebt man die aktuelle in eine Archivtabelle und versieht sie mit einer Versionsnummer, während die neueste Version in der ersten Tabelle bleibt.

Die Archivtabelle kann die Eigenschaft ROW_FORMAT=COMPRESSED (Beispiel MySQL InnoDb) haben, um weniger Speicherplatz zu beanspruchen, und es stellt kein Leistungsproblem dar, da nur selten auf sie zugegriffen wird. Ja, es ist ein gewisser Overhead, nicht nur Changesets zu speichern, aber wenn man ein wenig rechnet, kann man eine riesige Menge an Überarbeitungen fast platzsparend aufbewahren, da Ihre Artikel ohnehin stark komprimierbarer Text sind.

Zum Beispiel ist der Quellcode dieser gesamten Seite 11Kb komprimiert. Das ergibt fast 100 Versionen auf 1Mb. Im Vergleich dazu sind normale Artikel um einiges kleiner und bieten Ihnen im Durchschnitt 500-1000 Artikel/Versionen auf 1Mb. Das können Sie sich wahrscheinlich leisten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X