﻿# 比較 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 參數執行匯出工作，相對的備份檔案也比較小。
