38

私はstackoverflowやwikipediaのようなサイトを探していました。それらは編集の履歴を無期限に保存し、ユーザーが編集をロールバックできるようにします。適切なテクノロジー(データベースなど)を使用してこれを行う方法に関するリソース/書籍/記事を誰かが推奨できますか?

どうもありがとう!

4

1 に答える 1

21

いくつかのオプションがありますが、もちろん最も簡単なのは、すべてのバージョンを個別に記録することです。スタック オーバーフローのような投稿が通常あまり編集されないサイトの場合、これは適切です。ただし、ウィキペディアのようなものでは、スペースを節約するためにもっと賢くする必要があります。

ウィキペディアの場合、ページは最初に各バージョンごとにテキスト テーブルに格納されます。定期的に、多数の古いリビジョンがまとめて圧縮され、1 つのフィールドにパックされます。繰り返しが多いため、この方法で多くのスペースを節約できます。

一部のバージョン管理システムがそれをどのように行っているかを調べることもできます。たとえば、subversion はskip deltasを使用します。この場合、履歴の途中にあるリビジョンとの差分としてリビジョンが保存されます。これは、関心のあるリビジョンを再構築するために、最大で O(lg n) リビジョンを調べなければならないことを意味します。

一方、Git は、Wikipedia のアプローチにより近いものを使用します。

リビジョンは、最初は個別に圧縮された「ルーズ」オブジェクトとして保存されます。次に、定期的に git がすべてのルーズ オブジェクトを取得し、多少複雑なヒューリスティックに従ってそれらを並べ替え、「近くの」オブジェクト間に圧縮デルタを構築し、結果をpackfileとしてダンプします。
ファイルを再構築するために読み取る必要があるリビジョンの数は、パック構築プロセスへの引数によって制限されます。これには、場合によっては関係のないオブジェクト間でデルタを構築できるという興味深い特性があります。

于 2009-08-02T20:47:10.627 に答える