如何有效地存储编辑历史?

时间:2009-08-02 19:27:32

标签: history edit

我只想知道像stackoverflow和维基百科这样的网站,它们无限期地存储编辑历史,并允许用户回滚编辑。有人可以使用任何合适的技术(如数据库等)推荐任何有关如何执行此操作的资源/书籍/文章

非常感谢!

1 个答案:

答案 0 :(得分:16)

有很多选择;当然,最简单的方法是单独记录所有版本。对于像stackoverflow这样的网站,帖子通常不会被编辑很多次,这是合适的。但是对于像维基百科这样的东西,人们需要更加聪明才能节省空间。

在维基百科的情况下,页面最初与text table中的每个版本分开存储。定期将许多旧版本压缩在一起,然后打包到一个字段中。由于会有很多重复,你可以通过这种方式节省大量空间。

您可能还想了解一些版本控制系统如何执行此操作 - 例如,subversion使用skip deltas,其中修订存储为与历史记录中途的修订版本的差异。这意味着必须检查最多O(lg n)修订版本以重建一个人的兴趣修订版。

另一方面,Git使用的东西与维基百科的方法更相似。修改首先存储为单独压缩的“松散”对象,然后定期git获取所有松散对象,根据一些复杂的启发式对它们进行排序,然后在“附近”对象之间构建压缩增量并将结果转储为{{3 }}。需要读取以重建文件的修订数量受到包构建过程的参数的限制。这有一个有趣的特性,在某些情况下,可以在不相关的对象之间构建增量。