存储版本更改(如stackoverflow和维基百科)会涉及哪些算法和流程?
只保留一份邮件副本吗?如果是这样,它只是最新的副本?那么只返回到以前版本的更改从那里存储? (这样可以更快地显示主消息)。 或者存储完整的消息?如果在每个显示器上进行这些比较,是否也这样做了?
哪种算法最适合用于确定消息中的确切更改?这些数据是如何存储在数据库中的?
如果有人确切知道维基百科或stackoverlfow我想知道什么。
答案 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)
接受的答案非常糟糕。问题: