« ブログ公開から3年経ちました | トップページ | BunBackupのいろいろな顔 »

2006/12/14

BunBackupの速さの秘密!?

あるユーザーの方から、「BunBackupはなぜ速いのか」という質問をいただきました。
そこで、簡単にBunBackupの速さの秘密(?)についてご説明したいと思います。

まず先にお断りしておきたいのは、すべての条件において速いソフトはないということです。ある人は速いと感じていても、他の人には遅いと感じる可能性もあります。それはなぜでしょうか?
たとえば、数千個のファイルをバックアップの対象とする場合と、数百万個のファイルを対象とする場合では、ソフトの作り方は全く異なります。これは、バックアップの条件によって速度の最適化方法が異なるためです。

そのため、BunBackupは最も多いだろうと予想されるユーザーを対象に、速度の最適化を行っています。では、最も多いユーザーとは、どんなユーザーでしょう。
私は
  • バックアップ元はローカルHDD
  • バックアップ先は外付けのメディア、またはネットワーク
  • バックアップ対象となるファイル数は数万個程度
と考えました。
この仮定に基づくと
  • バックアップ元とバックアップ先は独立した別のドライブ
  • バックアップ元は速いメディア
  • バックアップ先は遅いメディア
  • 処理するための十分な空きメモリがある
と考えることができます。
そこで、この条件で速くなる方法を検討します。

バックアップには、大きく分けて4つの行程があります
  1. バックアップ先のファイル情報を取得する
  2. バックアップ元のファイル情報を取得する
  3. バックアップ元・先を比較し、コピーするファイルを抽出する
  4. ファイルをコピーする
バックアップ元と先は独立しているドライブと仮定しています。また、バックアップ先よりもバックアップ元の方が速いメディアと仮定しています。
そこで「1」を実行している間に「2」が実行できれば、「2」に必要な時間が短縮できます。そのため、BunBackupはマルチスレッドで、「1」と「2」を同時に実行し時間を節約しています。

「3」については様々なアルゴリズムがありますが、私が採用しているのは非常にシンプルなアルゴリズムです。処理するための十分な空きメモリがあると仮定していますので、まずバックアップ元とバックアップ先のファイル情報をメモリに保存します。次に、それぞれをソート(文字コード順に並べ替え)し、それを比較していくという方法をとっています。

実はこのアルゴリズムは公開後何回も変更しています。何かアイデアが浮かぶたびに新しいアルゴリズムを試してみて、今よりも速くなれば、それに切り替えるということを続けています。そのため、今後もこのアルゴリズムは変更になるかもしれません。

「4」については、単にファイルをコピーしているだけで、何も高速化はしていません。
大容量のバッファを利用したコピーやマルチスレッドコピーなど、ファイルコピーの高速化方法はいくつかあります。実はこれらについては以前実際にソフトを作成していろいろ試してみました。その結果、これらの方法は採用しませんでした。なぜ採用しなかったかはここで書いてしまうと長くなりますので、興味のある方がいらっしゃれば改めて投稿したいと思います。

このような感じで、高速化は拍子抜けするほど非常にシンプルな手法しか採用していません。結局、ターゲットを絞ること、余計なことはせずにシンプルにすることが、速度的にも安定性的にも有利なのかもしれません。

このほかに特種な高速化手法として、「高速ファイルチェック」という機能もあります。条件がマッチすれば非常に高速にバックアップをすることができます。「高速ファイルチェック」については以前の投稿やヘルプなどを参照してください。
  generated by feedpath

|

« ブログ公開から3年経ちました | トップページ | BunBackupのいろいろな顔 »

トラックバック


この記事へのトラックバック一覧です: BunBackupの速さの秘密!?:

« ブログ公開から3年経ちました | トップページ | BunBackupのいろいろな顔 »