前陣子比較了一下使用 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 參數執行匯出工作,相對的備份檔案也比較小。