Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在数据库中存储文本差异?_Php_Mysql_Diff - Fatal编程技术网

Php 如何在数据库中存储文本差异?

Php 如何在数据库中存储文本差异?,php,mysql,diff,Php,Mysql,Diff,我已经决定在LAMP堆栈中使用Horde Text_Diff引擎来计算Diff并渲染它们。我的问题是: 在数据库中实际存储增量的好方法是什么?我以前从未设计过这种数据库应用程序,而且似乎大多数引擎都需要完整的原始文本和更改文本的序列化副本来呈现差异 如果是这种情况,那么如何在不存储整个新文档的情况下将差异数据存储在数据库中 (注意:对于这个特殊的目的,它将始终是当前版本->建议的差异->新的当前版本,这意味着我正在尝试存储实际的差异,而不是反向差异。)我认为您应该能够使用。它仅以更改的形式在两个

我已经决定在LAMP堆栈中使用Horde Text_Diff引擎来计算Diff并渲染它们。我的问题是:

在数据库中实际存储增量的好方法是什么?我以前从未设计过这种数据库应用程序,而且似乎大多数引擎都需要完整的原始文本和更改文本的序列化副本来呈现差异

如果是这种情况,那么如何在不存储整个新文档的情况下将差异数据存储在数据库中


(注意:对于这个特殊的目的,它将始终是当前版本->建议的差异->新的当前版本,这意味着我正在尝试存储实际的差异,而不是反向差异。)

我认为您应该能够使用。它仅以更改的形式在两个文本(或文件)之间创建差异。创建的补丁可以存储在数据库中。您仍然需要原始文本,然后是最新版本的所有修补程序

对于PHP,可以使用创建文本和文件的差异

在数据库中存储差异 要在数据库中存储差异,需要保留差异的顺序、差异内容和原始文本

我假设您已经存储了原始文本。然后,可以将diff存储到diff表中,该表包含对原始文本的引用和自动递增键,以保留diff文本内容旁边的顺序。然后,您需要按照正确的顺序依次插入一个diff,这样就可以了

要重新创建当前版本,请查询原始版本和订购的所有差异。然后依次应用一个diff以获得您想要的版本


或者,您也可以创建另一个包含特定修订结果的表,以防止反复运行大量周期。但是这会使数据库内的数据冗余。

<>对于wiki应用程序,考虑存储:

  • 最新版本的全文[以便于搜索、快速显示],例如在“文章”表格中
  • 旧版本作为最新文本的反向差异。每个以前的版本都可以存储为
    StoredEdition[X]=diff(版本[X+1],版本[X])
    ,其中
    edition[0]
    是最早的版本。例如,在“articles_revisions”表中,每一行都有一个时间戳并引用articleID
    很抱歉,目前我没有建议使用工具从串行差异或反向差异中重建文本。

    另外请注意,这意味着我永远不必执行三向差异或合并两个差异。因此,此方法将使用Linux命令行使用差异创建修补程序文件,并使用修补程序应用它?这回答了问题“如何生成差异”,这并没有被问到。我对生成差异很在行……有几十种解决方案,我只是觉得没有办法重新组合它们,除非我像你所说的那样使用命令行。我真正想要的是一种从任意差异引擎创建补丁文件的方法。(注意:我正在寻找一种方法,不一定是已经实现了这一点的代码。)@JRL:我添加了一些如何将其存储在数据库中的方法(正如您所要求的)但是,阅读你的最后一条评论,我仍然有一个问题要完全理解你的问题。可能这已经是编辑的一部分,如果没有,请留下更多的评论,说明遗漏了什么。可能有一些简单的方法可以找到。哈克雷:主要问题是,Horde中的渲染引擎需要PHP中的Text_Diff对象,这需要seri我只需要将差异线存储在数据库中,我只是不确定程序如何理解这些差异代表什么,或者它希望它们以什么格式存储。