38

I was just wondering for sites like stackoverflow and wikipedia, they stores history of edits indefinitely and allows user to roll back the edits. Can someone recommend any resources/books/articles regarding how to do this using any suitable technology (such as databases etc)

Thanks a lot!

4

1 回答 1

21

有许多选项,最简单的当然是简单地独立记录所有版本。对于像 Stack Overflow 这样的网站,帖子通常不会被多次编辑,这是合适的。但是对于像维基百科这样的东西,需要更聪明以节省空间。

在 Wikipedia 的情况下,页面最初与每个版本分开存储在text table 中。定期将多个旧版本压缩在一起,然后打包到一个字段中。由于会有很多重复,所以这样可以节省很多空间。

您可能还想了解一些版本控制系统是如何做到的——例如,subversion 使用skip deltas,其中修订存储为与历史中途修订的差异。这意味着一个人将不得不检查最多 O(lg n) 个修订来重建自己感兴趣的修订。

另一方面,Git 使用更类似于 Wikipedia 的方法。

修订首先存储为单独压缩的“松散”对象,然后 git 定期获取所有松散对象,根据某种复杂的启发式对它们进行排序,然后在“附近”对象之间构建压缩增量并将结果作为packfile转储。
需要读取以重建文件的修订数量受包构建过程的参数限制。这有一个有趣的特性,在某些情况下,可以在不相关的对象之间构建增量。

于 2009-08-02T20:47:10.627 回答