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

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

非常感谢!

有很多select; 当然,最简单的就是单独logging所有版本。 对于像stackoverflow这样的站点,通常不会经常编辑post,这是合适的。 然而,对于像维基百科这样的东西,人们需要更聪明才能节省空间。

在维基百科的情况下,页面最初与每个版本分开存储在文本表中 。 定期地,一些旧版本被压缩在一起,然后打包成一个字段。 由于会有很多重复,这样可以节省很多空间。

您可能还想了解一些版本控制系统是如何实现的 – 例如,颠覆使用跳过增量 ,其中修订与存储在历史中途的修订不同。 这意味着人们最多只需要检查一下O(lg n)的修改就可以重新修改利益的修改。

另一方面,Git使用更类似于维基百科的方法。 修订首先作为单独压缩的“松散”对象存储,然后周期性地git将所有松散对象,按照一些复杂的启发式进行sorting,然后在“附近”对象之间构build压缩变化量,并将结果转储为包文件 。 为了重build文件而需要读取的修订版本的数量受到包构build过程的论证的限制。 这有一个有趣的特性,在某些情况下,可以在不相关的对象之间build立三angular洲。