Php 什么';在数据库中存储差异的最简洁的方法是什么?

Php 什么';在数据库中存储差异的最简洁的方法是什么?,php,mysql,version-control,Php,Mysql,Version Control,我想实现类似于维基媒体修订历史的东西?最好的PHP函数/库/扩展/算法是什么 我希望差异尽可能紧凑,但我很高兴仅限于显示每个版本及其兄弟版本之间的差异,并且一次只能回滚一个版本 在某些情况下,只有几个字符可能会更改,而在其他情况下,整个字符串可能会更改,因此我很想了解一些技术是否适用于小更改而不是大更改,以及在某些情况下,仅存储整个副本是否更有效 用Git或SVN之类的东西来支持整个系统似乎有点极端,我真的不想将文件存储在磁盘上。你必须问问自己:最终用户希望更频繁地检索什么类型的数据:修订,还是

我想实现类似于维基媒体修订历史的东西?最好的PHP函数/库/扩展/算法是什么

我希望差异尽可能紧凑,但我很高兴仅限于显示每个版本及其兄弟版本之间的差异,并且一次只能回滚一个版本

在某些情况下,只有几个字符可能会更改,而在其他情况下,整个字符串可能会更改,因此我很想了解一些技术是否适用于小更改而不是大更改,以及在某些情况下,仅存储整个副本是否更有效


用Git或SVN之类的东西来支持整个系统似乎有点极端,我真的不想将文件存储在磁盘上。

你必须问问自己:最终用户希望更频繁地检索什么类型的数据:修订,还是修订的差异? 我会使用unix中的标准
diff
。并且,根据上述问题的答案,在数据库中存储差异或整个修订

用Git或SVN之类的东西支持整个系统似乎有点极端


为什么??AFAIR的Github以这种方式存储Wiki;)

我将使用
diff
创建增量,并使用
patch
按顺序应用一个或多个编辑来构建处于已知状态的文档。当然,您做得越多,就越清楚您可以将此任务卸载到版本控制工具。我已经两次重新设计了diff/patch系统,将SVN用于这类任务。

完整地存储每条记录要比存储它们的diff容易得多。然后,如果您想要两个修订的差异,可以根据需要使用生成一个

我喜欢将记录的所有版本存储在一个表中,并使用
MAX(revision)
、一个“current”布尔属性或类似属性检索最新版本。其他人更喜欢非规范化,并有一个镜像表来保存非当前版本

如果您存储差异,您的模式和算法将变得更加复杂。然后,您需要存储至少一个“完整”版本和多个“差异”版本,并在需要完整版本时从一组差异重新构建完整版本。(这是SVN存储内容的方式。Git存储每个修订版的完整副本,而不是差异。)


程序员的时间很昂贵,但磁盘空间通常很便宜。请考虑是否将每一个修订都存储在一个真正的问题上。

Git实际上完全存储了每个版本,而不是差异。到最后一点,系统可能需要运行在像Helku这样的服务(在自由层)中,没有持续的磁盘存储到您的第一个点-在这个阶段还不完全清楚,但我认为该功能将主要用于查看已更改的内容,而不是查看之前的全部状态。斯威普说,最常见的操作是保存修订,这意味着每次保存时的差异会带来最大的开销。我认为这是存储完整版本的一个胜利。