2010-08-05 55 views
12

這一直在我腦海中徘徊,所以我想我可能會繼續前進並提問。wiki如何處理多個同時編輯?

wiki如何處理同一內容的多個編輯?

下面是我問的一個簡單的例子。假設一個頁面有以下內容:

我是一個頁面!

現在讓我們說,兩個去編輯該頁面。每個人補充說了一句:

人之一:

我的網頁!
我是同一頁中的第二句話!

人二:

我的網頁!
我是第二句話!

試想每個人的第二句是關於頁面,每個人想在新增的主題同樣相關,但不同的事實。

現在,讓我們說,人的人兩個DOE前一個提交他們的變化,但是二人甚至沒有機會看到他所做的改變。當他最後去提交時,人2的變化是否覆蓋了人1的變化?

有沒有可用於此的差異/合併算法?

+0

hehe併發編程數據隱患總是很有趣:) – 2010-08-05 05:12:30

回答

8

我相信維基百科使用a fairly simple diff/merge算法,類似於大多數源代碼控制軟件。

在您給出的示例中,它會引發合併衝突錯誤,因爲無法確定哪個行應該在最終標記中排在第一位。第二位保存更改的人員將看到合併錯誤頁面,他們必須選擇如何解決衝突。

請記住,維基百科是在併發用戶規模的高端。對於大多數維基,使用一個非常簡單的「最後儲存贏」算法可能是可以接受的,第二人的編輯只是簡單地覆蓋第一個人。隨着歷史的增加,第一個人應該很容易發現他們的變化已被覆蓋並再次添加回來。

我相信這個解決方案是Stack Overflow使用的。 SO有一個額外的功能,其中使用Ajax調用來通知編輯器是否有其他人進來並在完成之前修改頁面。

1

可能有一個事務性機制使用鎖定來防止文件被編輯兩次。請參閱維基百科上的file locking

2

這取決於維基的味道。有幾十或幾百個wiki克隆。通常,第二個用戶將得到「此頁面已被其他用戶編輯」錯誤消息,然後他們必須重新加載頁面並重做其編輯。

維基肯定可以將這兩個編輯合併爲一個像Subversion那樣的版本控制系統。如果您熟悉UNIX patch命令,它將涉及區分用戶2的編輯並生成隨後應用的修補程序。該補丁可能成功也可能不成功;在你的例子中會有一個合併衝突,所以它會回到舊的「這個頁面已被另一個用戶編輯,你失去了」的錯誤信息。

1

Wiki如何處理多個同時編輯?

這取決於維基的實施。

有沒有可用於此的差異/合併算法?

符合您的要求的任何合併算法都可以。

一般取決於你喜歡wiki的行爲。例如,您可以選擇以這樣一種方式實現您的wiki,即在文章已被修改且Person Two正在處理過時的基本副本時,不會提交Person Two的更改。有潛力的人如果他/她知道這些變化,他們會進入完全不同的東西。在這種情況下,您可能會選擇不允許提交第二人的更改。這可以通過Kurt Du Bois在他的回答中提到的交易機制來實現。

另一種選擇是實現一種總是允許保存wiki文章的方法。在這種情況下,你可能會失去第一個人的變化,而在第一個方法中,你將失去第二個人的變化。

第三種方法是在合併窗口中並排顯示兩篇文章。我不知道一個支持這個的wiki。如果確實如此,我想知道如果偶然有三個(或更多)人在修改同一個文檔會發生什麼。

所以,如果你使用的是維基,我會建議保持小編輯。

如果您正在實施維基,您可以選擇如何讓維基系統運行。