2009-08-02 33 views
34

我只是想知道像stackoverflow和維基百科這樣的網站,他們無限期地存儲編輯歷史,並允許用戶回滾編輯。有人可以推薦任何資源/書籍/文章如何使用任何適當的技術(如數據庫等)如何有效地存儲編輯歷史?

非常感謝!

+3

+1好問題 – 2009-08-02 22:02:09

回答

14

有多種選擇;當然,最簡單的方法就是獨立記錄所有版本。對於像stackoverflow這樣的網站,帖子通常不會編輯很多次,這是適當的。然而對於像維基百科這樣的東西,人們需要更聰明才能節省空間。

在維基百科的情況下,頁面最初與每個版本分開存儲在text table中。定期地,一些舊版本被壓縮在一起,然後打包成一個字段。由於會有很多重複,因此您可以通過這種方式節省大量空間。

您可能還想了解一些版本控制系統是如何做到這一點的 - 例如,顛覆使用skip deltas,其中修訂與存儲在歷史中途的修訂不同。這意味着人們必須檢查最多O(lg n)的修訂版本,以重建對利益的修改。另一方面,Git使用更類似於維基百科的方法的東西。修訂首先作爲單獨壓縮的「鬆散」對象存儲,然後週期性地git將所有鬆散對象存儲起來,按照一些複雜的啓發式對它們進行排序,然後在「附近」對象之間構建壓縮變化量並將結果轉儲爲packfile。重建文件需要讀取的修訂版本數量受到包構建過程的爭論。這有一個有趣的特性,在某些情況下,可以在不相關的對象之間建立增量。

+1

我不知道關於skip deltas,我<3 logn算法 – Patashu 2013-03-13 22:08:37