2009-08-02 10 views
34

Ich habe mich nur für Websites wie Stackoverflow und Wikipedia gefragt, sie speichern den Verlauf der Bearbeitungen auf unbestimmte Zeit und erlauben dem Benutzer, die Änderungen rückgängig zu machen. Kann jemand irgendwelche Ressourcen/Bücher/Artikel empfehlen, wie dies mit jeder geeigneten Technologie (wie Datenbanken usw.) zu tun istWie speichert man die Bearbeitungsgeschichte effektiv?

Vielen Dank!

+3

+1 gute Frage –

Antwort

14

Es gibt eine Reihe von Optionen; Am einfachsten ist es natürlich, alle Versionen unabhängig voneinander aufzuzeichnen. Für eine Site wie stackoverflow, wo Posts normalerweise nicht sehr oft bearbeitet werden, ist dies angebracht. Jedoch für etwas wie Wikipedia muss man clever sein, um Platz zu sparen.

Im Falle von Wikipedia werden die Seiten zunächst mit jeder Version separat gespeichert, in der text table. In regelmäßigen Abständen werden mehrere ältere Revisionen zusammen komprimiert und dann in ein einzelnes Feld gepackt. Da es viele Wiederholungen geben wird, sparen Sie auf diese Weise viel Platz.

Sie könnten auch prüfen, wie einige Versionskontrollsysteme es tun - zum Beispiel verwendet Subversion skip deltas, wo Revisionen als Unterschied zu einer Revision in der Mitte des Verlaufs gespeichert werden. Dies bedeutet, dass man höchstens O (lg n) Revisionen untersuchen muss, um seine Revision von Interesse zu rekonstruieren.

Git, auf der anderen Seite, verwendet etwas ähnlicher Wikipedia-Ansatz. Revisionen werden zunächst als einzeln komprimierte "lose" Objekte gespeichert, dann nimmt git regelmäßig alle losen Objekte, sortiert sie nach einer etwas komplexen Heuristik, baut dann komprimierte Deltas zwischen "nahen" Objekten auf und legt das Ergebnis als packfile ab. Die Anzahl der Revisionen, die zum Rekonstruieren einer Datei gelesen werden müssen, ist durch ein Argument für den Pack-Erstellungsprozess begrenzt. Dies hat die interessante Eigenschaft, dass Deltas in einigen Fällen zwischen Objekten aufgebaut werden können, die nicht miteinander in Beziehung stehen.

+1

Ich wusste nicht über überspringen Deltas, I <3 Logn-Algorithmen – Patashu