我已经决定在LAMP堆栈中使用Horde Text_Diff引擎来计算diff并渲染它们.我的问题是:
将增量实际存储在数据库中的好方法是什么?我以前从未设计过这种数据库应用程序,并且看起来大多数引擎都需要完整序列化的整个原始文本和更改后的文本以呈现差异.
如果是这种情况,那么如何在不存储整个新文档的情况下将diff的数据存储在数据库中?
(注意:出于这个特殊目的,它将始终是当前版本 - >建议diff->新当前版本,这意味着我正在尝试存储实际差异而不是反向差异.)
我认为您应该能够使用该patch实用程序。它仅以更改的形式创建两个文本(或文件)之间的差异。然后可以将创建的补丁存储在数据库中。您仍然需要原始文本,然后将所有补丁更新到最新版本。
对于 PHP,xdiff 扩展可用于创建文本和文件的差异。
要将差异存储在数据库中,您需要保留差异的顺序、差异内容和原始文本。
我假设您已经存储了原始文本。然后,可以将差异存储到差异表中,该表包含对原始文本的引用和自动增量键,以保留差异的文本内容旁边的顺序。然后,您需要按照正确的顺序在另一个之后插入一个差异,应该没问题。
要重新创建当前版本,请查询原始版本和订购的所有差异。然后应用一个又一个差异以获得您想要的版本。
或者,您可以创建另一个包含特定修订结果的表,以防止一遍又一遍地运行大量循环。但这会使数据库内的数据变得冗余。
| 归档时间: |
|
| 查看次数: |
1214 次 |
| 最近记录: |