我只是想知道像stackoverflow和维基百科这样的网站,它们无限期地存储编辑历史,并允许用户回滚编辑.有人可以使用任何合适的技术(如数据库等)推荐任何有关如何执行此操作的资源/书籍/文章
非常感谢!
bdo*_*lan 17
有很多选择; 当然,最简单的方法是单独记录所有版本.对于像stackoverflow这样的网站,帖子通常不会被编辑很多次,这是合适的.但是对于像维基百科这样的东西,人们需要更加聪明才能节省空间.
在维基百科的情况下,页面最初与文本表中的每个版本分开存储.定期将许多旧版本压缩在一起,然后打包到一个字段中.由于会有很多重复,你可以通过这种方式节省大量空间.
您可能还想了解一些版本控制系统如何执行此操作 - 例如,subversion使用跳过增量,其中修订存储为与历史记录中途的修订版本的差异.这意味着必须检查最多O(lg n)修订版以重建一个人的兴趣修订版.
另一方面,Git使用的东西与维基百科的方法更相似.修改首先存储为单独压缩的"松散"对象,然后定期git获取所有松散对象,根据稍微复杂的启发式对它们进行排序,然后在"附近"对象之间构建压缩增量并将结果转储为packfile.需要读取以重建文件的修订数量受到包构建过程的参数的限制.这有一个有趣的特性,在某些情况下,可以在不相关的对象之间构建增量.