我想实现与维基媒体的修订历史类似的东西?什么是最好的PHP函数/库/扩展/算法?
我希望差异尽可能紧凑,但我很高兴只限于显示每个修订版本与其兄弟版本之间的差异,并且只能一次回滚一个修订版本.
在某些情况下,只有少数几个字符可能会改变,而在其他情况下,整个字符串可能会发生变化,所以我很想知道某些技术对于小变化是否比对大变量更好,如果在某些情况下它更有效存储整个副本.
最佳答案
存储每个记录比存储它们的差异要容易得多.然后,如果您想要两个版本的差异,您可以根据需要使用the PECL
Text_Diff
library生成一个版本.
我喜欢将记录的所有版本存储在单个表中,并使用MAX(修订版),“当前”布尔属性或类似方法检索最新版本.其他人更喜欢反规范化并拥有一个镜像表来保存非当前版本.
如果存储差异,则架构和算法会变得复杂得多.然后,您需要存储至少一个“完整”版本和多个“diff”版本,并在需要完整版本时从一组差异中重建完整版本. (这就是SVN存储东西的方式.Git存储每个修订版的完整副本,而不是差异.)
程序员时间很昂贵,但磁盘空间通常很便宜.请考虑是否完整存储每个版本是一个问题.