存储消息的修订更改

时间:2008-09-17 04:57:33

标签: algorithm version-control

存储版本更改(如stackoverflow和维基百科)会涉及哪些算法和流程?

只保留一份邮件副本吗?如果是这样,它只是最新的副本?那么只返回到以前版本的更改从那里存储? (这样可以更快地显示主消息)。 或者存储完整的消息?如果在每个显示器上进行这些比较,是否也这样做了?

哪种算法最适合用于确定消息中的确切更改?这些数据是如何存储在数据库中的?

如果有人确切知道维基百科或stackoverlfow我想知道什么。

6 个答案:

答案 0 :(得分:4)

Mediawiki(维基百科的软件)存储所有版本的全文,请参阅database schema。 Mediawiki中text table中的每个条目都有标记,告知内容是否已经过例如gziped,使用标准压缩通常是最常用的选择。

我不能告诉你如何在算法上做差异,但你使用的算法应该从文本的两个完整版本中做到。这是从数据库中获取旧对象和新对象的完整版本,然后执行diff。这使得可以容易地改变衍射算法。

Git是Unix应用程序的一个很好的例子,它可以做非常便宜(存储和速度)的增量存储。有维基可以使用git,例如ikiwiki,但我猜你想用数据库做这件事。

答案 1 :(得分:1)

通常,邮件存储为完整快照。以前的版本已禁用,并显示最新版本。可能会使用像缓存一样的优化,哪个版本是最新版本。

答案 2 :(得分:1)

longest common substring algorithm可用于检测版本之间的差异,但它是有限的。例如,它没有检测到文本的移动,但它会将其视为不相关的删除和插入。

我认为网站通常会完整存储最新版本,并从那里应用反向差异。这也是CVS的工作方式,但Subversion使用前向差异,这会导致结帐速度变慢。

要将其存储在数据库中,可以维护具有最新版本的主表,并且具有反向差异的单独表。此表格的行格式为(article_id, revision_id, differences)

答案 3 :(得分:0)

使用delta算法存储典型的修订版本更改,因此存储的唯一数据是每个修订版本相对于原始版本的更改。我不确定维基百科或stackoverflow如何实现它。

答案 4 :(得分:0)

我会使用以下技巧:

  • 将当前消息存储为完整文本。
  • 使用增量算法存储历史记录。

通过定期显示,您可以保持良好的性能,同时将历史记录保存在最低限度。

答案 5 :(得分:0)

接受的答案非常糟糕。问题:

  • 非未来证明
  • 复杂