12292


`Net::FTP#getbinaryfile`のマニュアルでは
`blocksize`の値を`1024`に設定しているのですが、`DEFAULT_BLOCKSIZE`は私の環境では `16384` でした。

[code]

    ftp.getbinaryfile('nif.rb-0.91.gz', 'nif.gz', 1024)
    
[/code]

<http://ruby-doc.org/stdlib-2.1.2/libdoc/net/ftp/rdoc/Net/FTP.html>

もちろんダウンロードしてくるサーバーのスペックや通信速度に依存する事は理解しているのですが、blocksize
を`1024`にしたほうが良いことのほうが多いのでしょうか？

通信エラーが起こりやすい環境ではblocksizeを小さくして、安定してるところでは大きくするのがいいのかと推測するのですが、このあたりの適切なサイズの感覚が全くなくわかりません。

どのような利点・欠点があり、おおまかにどの程度のサイズが一般的に使われているブロックサイズなのかを教えてください


CC BY-SA 3.0
2015-07-11T23:15:54.640
12286
2015-07-12T03:57:50.663
3271
question
ruby ftp
FTPの転送に使われるblocksizeの推奨について


>
> `Net::FTP#getbinaryfile`のマニュアルでは`blocksize`の値を`1024`に設定しているのですが、`DEFAULT_BLOCKSIZE`は私の環境では
> `16384`でした。

`DEFAULT_BLOCKSIZE`はRubyのソースコードにハードコードされていて、常に`16384`です。

>
> もちろんダウンロードしてくるサーバーのスペックや通信速度に依存する事は理解しているのですが、blocksizeを1024にしたほうが良いことのほうが多いのでしょうか？

ブロック付きで呼び出してダウンロードしたデータを順次ファイルに書き込むような使い方なら、メモリ使用量を抑えられますが、通常はblocksizeを小さくしてもパフォーマンスが低下するだけだと思います。

>
> 通信エラーが起こりやすい環境ではblocksizeを小さくして、安定してるところでは大きくするのがいいのかと推測するのですが、このあたりの適切なサイズの感覚が全くなくわかりません。

関係ありません。RubyのFTPライブラリ内部でのデータサイズの単位を設定するだけで、ソケットのバッファサイズなどには影響しません。

> どのような利点・欠点があり、おおまかにどの程度のサイズが一般的に使われているブロックサイズなのかを教えてください

`DEFAULT_BLOCKSIZE`にしておけば基本的に問題ありません。  
ファイルサイズが大きい場合に数値を大きくすればパフォーマンスが改善する可能性はあります。

前述の通り数値を小さくすればメモリ使用量を抑えられる場合がありますが、それが必要な状況というのはほとんど無いでしょう。


CC BY-SA 3.0
2015-07-12T03:46:33.957
12292
2015-07-12T03:57:50.663
2015-07-12T03:57:50.663
3639
3639
12286
answer