2008-09-17 75 views
2

存儲修訂更改(如stackoverflow和wikipedia)涉及哪些算法和過程?存儲消息的修訂更改

是否只保留一個消息副本?如果是這樣,它只是最新的副本?那麼只有更改回到以前的版本(s)從那裏存儲? (這將使主消息更快地顯示)。 或者是完整的消息存儲?如果是這樣的話,在每個顯示器上進行比較呢?

什麼算法最適合用來確定消息中的確切變化?這些數據如何存儲在數據庫中?

如果有人確切知道我最想知道的wikipedia或stackoverfow。

回答

1

longest common substring algorithm可用於檢測版本之間的差異,但它是有限的。例如,它沒有檢測到文字的移動,但它會將這看作是不相關的移除和插入。

我想網站通常會將最新的副本全部存儲起來,並從那裏應用反向差異。這也是CVS的工作方式,但Subversion使用前進差異,這會導致結賬速度變慢。

要將其存儲在數據庫中,可以使用最新版本維護主表,並且使用具有相反差異的單獨表格。該表格將具有格式爲(article_id, revision_id, differences)的行。

1

通常郵件存儲爲完整的快照。以前的版本被禁用,並顯示最近的版本。可能會優化使用像緩存哪個版本是最新的。

0

典型的版本更改是使用delta算法存儲的,因此唯一存儲的數據是每個版本相對於原始版本的更改。我不確定wikipedia或者stackoverflow是如何實現的。

0

我會使用以下方法:

  • 存儲當前的消息作爲完整文本。
  • 使用delta算法存儲歷史記錄。

這樣可以保持您的顯示效果,並保持歷史記錄的最小值。

4

Mediawiki(維基百科的軟件)存儲所有修訂版的全文,請參閱database schema。 Mediawiki中的text table中的每個條目具有標誌,該標誌指示內容是否已經例如gziped,使用標準壓縮通常是最好的選擇。

我不能告訴你如何在算法上做差異,但你使用什麼算法應該從文本的兩個完整版本中完成。這是從數據庫中獲取舊的和新的對象的完整版本,然後做差異。這使得可以容易地改變差異算法。

Git是Unix應用程序的一個很好的例子,它可以做非常便宜的(存儲和快速)增量存儲。有些wiki可以使用git例如ikiwiki,但我猜你想要用數據庫來做。

+0

希望我能接受2個回答 – 2008-09-20 07:47:51

0

接受的答案很糟糕..問題:

  • 非面向未來
  • 複雜
+0

即使你存儲的每個消息的完整副本,這表明你如何做差異一旦顯示「差異頁面」。 – 2008-09-23 13:27:47