存储消息的修订版本

时间:2020-03-05 18:57:58  来源:igfitidea点击:

在存储修订更改(例如stackoverflow和Wikipedia)中涉及哪些算法和过程?

仅保留邮件的一个副本吗?如果是的话,那只是最新的副本吗?那么,只有更改才能返回到以前的版本吗? (这样可以更快地显示主要消息)。
还是存储完整的消息?如果是,是否在每个显示器上进行比较?

哪种算法最适合用来确定邮件中的确切更改?此数据如何存储在数据库中?

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

解决方案

回答

通常,消息存储为完整的快照。以前的版本被禁用,并显示最新版本。可能会使用诸如缓存哪个版本为最新版本之类的优化。

回答

最长的通用子字符串算法可用于检测版本之间的差异,但它受到限制。例如,它不会检测到文本的移动,但是会将其视为无关的删除和插入。

我认为网站通常会完整地存储最新副本,并从那里应用反向差异。这也是CVS的工作方式,但是Subversion使用前向差异,这会导致较慢的签出。

要将其存储在数据库中,可以维护一个具有最新版本的主表,并拥有一个具有相反差异的单独表。该表中的行格式为((article_id,revision_id,difference))。

回答

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

回答

我将使用以下技术:

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

定期显示可保持良好的性能,同时将历史记录的存储空间降至最低。

回答

Mediawiki(用于Wikipedia的软件)存储所有修订的全文,请参见数据库架构。 Mediawiki文本表中的每个条目都有标志,用于指示内容是否为gziped,使用标准压缩通常是最明智的选择。

我无法告诉我们如何从算法上进行差异比较,但是无论我们使用哪种算法,都应该从文本的两个完整版本中完成。那就是从数据库中获取旧对象和新对象的完整版本,然后进行比较。这使得可以容易地改变差异算法。

Git是Unix应用程序的一个很好的例子,它可以进行非常便宜的(存储和快速)增量存储。有可以使用git的Wiki,例如ikiwiki,但我猜我们想使用数据库来完成此操作。

回答

公认的答案是非常糟糕的。问题:

  • 非未来的证明
  • 复杂