【发布时间】:2010-11-16 05:13:29
【问题描述】:
我只是想知道像 stackoverflow 和 wikipedia 这样的网站,它们会无限期地存储编辑历史并允许用户回滚编辑。有人可以推荐任何关于如何使用任何合适的技术(如数据库等)来做到这一点的资源/书籍/文章
非常感谢!
【问题讨论】:
我只是想知道像 stackoverflow 和 wikipedia 这样的网站,它们会无限期地存储编辑历史并允许用户回滚编辑。有人可以推荐任何关于如何使用任何合适的技术(如数据库等)来做到这一点的资源/书籍/文章
非常感谢!
【问题讨论】:
有许多选项,最简单的当然是单独记录所有版本。对于像 Stack Overflow 这样的网站,帖子通常不会被多次编辑,这是合适的。但是对于像维基百科这样的东西,需要更聪明地节省空间。
对于 Wikipedia,页面最初以每个版本单独存储在 text table 中。定期将多个旧版本压缩在一起,然后打包到一个字段中。由于会有很多重复,所以这样可以节省很多空间。
您可能还想了解一些版本控制系统是如何做到的——例如,subversion 使用skip deltas,其中修订存储为与历史中途修订的差异。这意味着一个人将不得不检查最多 O(lg n) 个修订来重建自己感兴趣的修订。
另一方面,Git 使用更类似于 Wikipedia 的方法。
修订首先存储为单独压缩的“松散”对象,然后 git 定期获取所有松散对象,根据某种复杂的启发式对它们进行排序,然后在“附近”对象之间构建压缩增量并将结果转储为packfile。
重建文件所需读取的修订数量受包构建过程的参数限制。这有一个有趣的特性,在某些情况下,可以在不相关的对象之间构建增量。
【讨论】: