2012-04-24 35 views
2

我相信Wordpress會將多個帖子作爲「修訂」存儲,但我認爲這對空間的使用效率非常低下?Web應用程序的數據如何實現修訂/版本控制

有沒有更好的方法?我認爲gitit是一個使用GIT進行版本控制的Wiki,但它是如何完成的?例如。我的應用程序是在PHP中,我必須讓它與GIT交談來提交和檢索數據?

那麼,什麼是實現網絡應用程序的版本控制的好方法(例如,在博客中它可能是帖子的內容)

+0

也許您需要指定您希望擁有VCS的級別。只需存儲兩個帖子版本或記住每個字母按下/刪除作爲一個單獨的修訂? – Kromster 2012-06-14 07:51:21

+0

@KromStern,我想我會首先要存儲2個後期版本,如果可能的話,也許只是存儲更改。否則,存儲2個帖子將是trival。有差異功能將是一個有用的補充 – 2012-06-14 14:21:50

回答

12

我最近剛剛實現了這樣一個系統 - 它使用被取代的記錄的概念,以及以前和當前的鏈接。我對如何最好地實現這一點做了大量的研究 - 最終,我得到的模型與Wordpress(和其他系統)類似 - 將更改存儲爲新記錄並使用它。

考慮到所有可用選項,空間實際上是創作內容(如帖子)的最後關注點 - 媒體文件佔用更多空間,而且無論如何都不能將這些空間存儲爲增量。

在任何情況下,Git的工作方式實際上是相同的,因爲它爲每個修訂存儲整個內容,除了它最終會打包成增量(或者當您提出要求時)。

Git Storage Object graph

再回到1990年,我們使用SCCS或RCS和有時的自由,我們真正需要的版本控制磁盤空間只有30MB,以提高效率,避免存儲空間不足。

考慮到現代系統上可用存儲的平均數量,使用deltas節省空間並不是真的值得所有相關的加重。你可以認爲這是浪費的空間,但我要說,這是從長遠來看,以存儲在他們的原始形式的東西無壓縮高效得多

  • 它的速度更快
  • 更容易通過舊版本
  • 搜索
  • 查看更快速
  • 更容易跳到一組更改中,而無需處理大量增量。
  • 實現起來很容易,因爲您不必編寫增量生成算法。

此外,標記不會像帶有增量值的純文本一樣好,尤其是使用wysiwyg編輯器進行編輯時。

2

保持一個表,最新版本的如文章。

保存新版本時,將當前的內容移到歸檔表中,並在其上放置版本號,同時將最新版本保留在第一個表中。

歸檔表可以具有屬性ROW_FORMAT = COMPRESSED(MySQL InnoDb示例)佔用較少的空間,並且它不會成爲性能問題,因爲它很少被訪問。是的,這不僅僅是存儲變更集的開銷,而且如果你做了一些數學運算,你可以在幾乎沒有空間的地方保留大量的修訂版,因爲無論如何你的文章都是高度可壓縮的文本。

例如,整個頁面的源代碼是11Kb壓縮的。這爲您提供了近1Mb的100個版本。相比之下,正常的文章比較小,平均可以在1Mb上給你500-1000篇文章/版本。你可能會負擔得起。

相關問題