2009-08-02 31 views
34

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

非常感谢!

+3

+1好问题 – 2009-08-02 22:02:09

回答

14

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

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

您可能还想了解一些版本控制系统是如何做到这一点的 - 例如,颠覆使用skip deltas,其中修订与存储在历史中途的修订不同。这意味着人们必须检查最多O(lg n)的修订版本,以重建对利益的修改。另一方面,Git使用更类似于维基百科的方法的东西。修订首先作为单独压缩的“松散”对象存储,然后周期性地git将所有松散对象存储起来,按照一些复杂的启发式对它们进行排序,然后在“附近”对象之间构建压缩变化量并将结果转储为packfile。重建文件需要读取的修订版本数量受到包构建过程的争论。这有一个有趣的特性,在某些情况下,可以在不相关的对象之间建立增量。

+1

我不知道关于skip deltas,我<3 logn算法 – Patashu 2013-03-13 22:08:37