はじめに
GCSのオブジェクトを gsutilコマンドで削除することがあったので、以前から気になっていた処理速度について以下の2点を検証しました。
- 処理速度はオブジェクト数とサイズ、どちらに影響されるのか?
- -m (マルチスレッド処理) は有効なのか?
今回の検証はとてもざっくりとしたもので、上記の2点を確認することだけを目的としています。
ですので、比較対象や条件、計測方法などは精密ではないのでご了承ください。
結論
A. オブジェクト数
- 処理速度はオブジェクト数とサイズ、どちらに影響されるのか?
A. 有効
- -m (マルチスレッド処理) は有効なのか?
検証
処理速度はオブジェクト数とサイズ、どちらに影響されるのか?
使用したコマンドは以下の通りです。
$ gsutil rm -r gs://バケット名
3つのバケットを削除しました。各バケットのオブジェクト数とサイズ、処理時間を以下に示します。
オブジェクト数 (個) | サイズ (GB) | 処理時間 (秒) | |
---|---|---|---|
バケットA | 316 | 1.17 | 8 |
バケットB | 310 | 5.73 | 7 |
バケットC | 1091 | 15.12 | 23 |
バケットAとバケットBを比較すると、オブジェクト数はほぼ同じで、サイズが5倍ほど差があります。
しかし処理時間についてはほとんど変わりません。
このことから、処理時間はオブジェクト数に影響されることがわかります。
パターンAとパターンCを比較すると、オブジェクト数の差は3倍ほどあり、処理時間も3倍ほど差があります。
処理時間はオブジェクト数に比例することが示唆されます。
一方で、処理時間とサイズについては特に関係がなさそうです。
以上のことから、処理速度はオブジェクト数とサイズ、どちらに影響されるのか? の問いに対しては、オブジェクト数である と答えられそうです。
-m (マルチスレッド処理) は有効なのか?
先ほども使用したコマンドに -mオプションの有無で検証しました。
-m オプションなし
$ gsutil rm -r gs://バケット名
-m オプションあり
$ gsutil -m rm -r gs://バケット名
結果は以下の通りです。
-m オプション | オブジェクト数 (個) | サイズ (GB) | 処理時間 (秒) | |
---|---|---|---|---|
パターンD | なし | 154 | 2.14 | 5 |
パターンE | あり | 154 | 2.14 | 2 |
パターンDとパターンEで、オブジェクト数とサイズは同じです。
処理時間を見ると 2.5倍差があります。
別のパターンでも検証してみました。
-m オプション | オブジェクト数 (個) | サイズ (MB) | 処理時間 (秒) | |
---|---|---|---|---|
パターンF | なし | 200 | 521 | 6 |
パターンG | あり | 200 | 521 | 2 |
こちらもオブジェクト数とサイズは同じで、処理時間には 3倍差がありました。
以上のことから -mオプションの有無で 2.5~3倍ほど処理時間に差があることが示唆されました。
-m (マルチスレッド処理) は有効なのか? という問いに対しては、有効であると答えることができます。
最後に
はじめにも書いたように、今回の検証はとてもざっくりしたもので数値に関しては参考程度です。
もちろん、サーバのスペック等ほかの要因でも結果は変わりますし。
(GCSの整理しなきゃいけないしついでに計測してみるか、ぐらいの感じで始めたので...)
ただ gsutilコマンドで GCSのオブジェクトを削除する際に、オブジェクト数が処理時間に影響すること、-mオプションで処理時間を大きく短縮できることがわかっていれば役に立つと思います。
もし自分と同じことに疑問を感じている人がいたら参考にしていただければと思います。
時間があるときにちゃんとベンチマークを測定しよう。。