バイオインフォマティストには高速回線の幸せを

遠くのサーバーから大量のデータをとってくるのは非常に時間が掛かる。例えばヒトゲノムのデータとか。最近は高速にダウンロードするためにAsperaやらBitTorrentやら専用のダウンローダー向けの配布をやっている場合も多いですが、そうでない場合はどうすればいいのでしょうか?

 

答え:複数接続で並列ダウンロードする

 

例えば、scpやwgetでダウンロードする場合は単一接続で繋ぐより、複数接続した方が全体としての速度が改善します。ただし接続数の上限を超えてしまうと拒絶される恐れもあるので、予め指定した上限以下の接続数で全部を落としてくる工夫が必要です。(因みに私はpythonのmultiprocessingで専用のダウンローダー組んでます。単一回線で順次落としたら一週間位掛かったファイルも上手くやれば数時間で全部下ろしてこれます。

 

ところでなぜこんな方法で速度が改善するかというと、距離が遠いサーバーからのダウンロード速度が回線速度ではなく遅延時間によって支配されているからだそうです。TCPではデータのやり取りの際に一々受信の可否の確認が入りますが、ここで遅延の影響が大きく出てしまうそうです。で、この待ち時間は回線・CPUが共に遊んでいる状態なので、ここで別の回線でダウンロードが実行されていればそっちに優先的に回線とCPUが割り振られるという算段のようです。面白いですね、ネットワーク。

 

ところで、TCPが問題というだけなら、もしかしたらUDPプロトコルでファイル転送ソフトを作れば速度が出たりするのかしら?ちょっと気になります。(´・ω・`)