The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

比較 svnadmin dump 與 svnadmin load 的執行效能

前陣子比較了一下使用 svnadmin 指令備份與還原 Subversion Repository 的速度,以供未來備份、還原版本庫時的參考依據。

首先我測試的資料量如下:

  • 目錄大小:315MB ( 最後一版所有檔案的大小總和 )
  • 檔案數量:4,016
  • 目錄數量:360
  • 版本數量:共 756 個 Revisions

備份(匯出)測試

匯出的時候我分別測試了不同的 SVN Repository 資料庫類型,也就是 Berkeley database (BDB) 與 Native filesystem (FSFS),並且採用不同的匯出方式,也就是使用 --incremental ( 以差異增量進行傾印 ) (預設的方式),以及使用了 --deltas (於傾印檔輸出中使用檔案差異),一共四種組合。 

實驗一:FSFS 類型的 SVN Repository 使用 --incremental 匯出 ( 預設 )

執行指令:svnadmin dump xxx --incremental > xxx-incremental.dump

執行時間: 1 分 1 秒

檔案大小:524MB

實驗二:FSFS 類型的 SVN Repository 使用 --deltas 匯出

執行指令:svnadmin dump xxx --deltas > xxx-deltas.dump

執行時間: 3 分 44 秒

檔案大小:246MB

實驗三:BDB 類型的 SVN Repository 使用 --incremental 匯出

執行指令:svnadmin dump xxx --deltas > xxx-deltas.dump

執行時間: 6 分 33秒

檔案大小:524MB

實驗四:BDB 類型的 SVN Repository 使用 --deltas 匯出

執行指令:svnadmin dump xxx --deltas > xxx-deltas.dump

執行時間: 2 分 37 秒

檔案大小:246MB

還原(匯入)測試

匯入的時候我分別測試了用 xxx-incremental.dump 與 xxx-deltas.dump 匯入到不同的 SVN Repository 資料庫類型,也就是 Berkeley database (BDB) 與 Native filesystem (FSFS),一共四種組合。

實驗一:使用 xxx-incremental.dump 匯入 FSFS 類型的 Repository

執行指令:svnadmin load xxx-fsfs-inc < xxx-incremental.dump

執行時間: 6 分 54 秒

版本庫目錄大小:234MB

實驗二:使用 xxx-deltas.dump 匯入 FSFS 類型的 Repository

執行指令:svnadmin load xxx-fsfs-deltas < xxx-deltas.dump

執行時間: 6 分 19 秒

版本庫目錄大小:234MB

實驗三:使用 xxx-incremental.dump 匯入 BDB 類型的 Repository

執行指令:svnadmin load xxx-bdb-inc < xxx-incremental.dump

執行時間: 12 分 32 秒

版本庫目錄大小:590MB

實驗四:使用 xxx-deltas.dump 匯入 BDB 類型的 Repository

執行指令:svnadmin load xxx-bdb-deltas < xxx-deltas.dump

執行時間: 9 分 37 秒

版本庫目錄大小:427MB

結論

一般來說,備份通常都是以防萬一,所以時間比較沒那麼緊迫,而還原的時候當然是逼不得已的,且還原時間要越短越好!若用這個邏輯來思考,並用以上的實驗數據來看,SVN Repository 的資料庫類型選擇用 Native filesystem (FSFS) 比較適合,而備份的時候應當選擇用 --deltas 參數執行匯出工作,相對的備份檔案也比較小。