階層型名前空間が有効なバケットのパフォーマンスを最適化する

このページでは、階層型名前空間が有効になっているバケットでパフォーマンスを最適化する方法について説明します。

オブジェクトのリスト

オブジェクトのリスト表示に関するパフォーマンスの注意事項は次のとおりです。

  • 階層型名前空間が有効になっているバケットでは、バケット全体または接頭辞を持つすべてのオブジェクトを一覧表示すると、ファイル システムの ls -r コマンドと同様に、各フォルダとサブフォルダを走査する必要があるため、リソースを大量に消費します。したがって、バケット内のフォルダが多いほど、オブジェクトの一覧表示が遅くなります。空のフォルダの数が多すぎると、オブジェクトのリスト表示のパフォーマンスにも悪影響が及ぶ可能性があります。パフォーマンスに悪影響を及ぼさないように、各フォルダ内のオブジェクト数を最大化し、空のフォルダの定期的な削除をおすすめします。
  • 階層型名前空間が有効になっているバケットでは、オブジェクトがフォルダ構造内に編成されているため、区切り文字と特定の接頭辞を使用して特定のフォルダ内のオブジェクトとサブフォルダを一覧表示または取得する方が効率的です。区切り文字と特定の接頭辞を使用する場合にリスティングのパフォーマンスを最適化するには、includeFoldersAsPrefixes パラメータを設定します。設定しない場合、Cloud Storage は空のフォルダを除外するために追加のチェックを実行します。これにより、オペレーションの速度が低下する可能性があります。オブジェクトの一覧表示で includeFoldersAsPrefixes を使用する方法については、オブジェクトの一覧表示をご覧ください。

フォルダ管理

フォルダを効率的に管理するには、次のことをおすすめします。

  • フォルダ構造を事前に作成する: オブジェクトのアップロード、書き換え、オペレーション作成で、自動フォルダ作成に依存するのではなく、フォルダ作成オペレーションを使用して、目的のフォルダ構造を事前に取得します。フォルダ構造を事前に作成すると、パフォーマンスの一貫性と予測可能性が向上します。
  • フォルダあたりのオブジェクト比率を最大化: フォルダの作成と管理に関連するオーバーヘッドを削減するため、フォルダあたりのオブジェクトの比率を高くします。
  • フォルダの作成と削除のリクエストを制限する: フォルダの作成または削除は、階層的な性質のため、個々のオブジェクトを操作するよりもリソースを消費します。スムーズなパフォーマンスを確保するため、Cloud Storage ではこれらのオペレーションをバケットごとに 1, 000 リクエスト/秒に制限しています。この上限を超えるリクエストは明示的には制限されませんが、リソースの可用性によって、リクエストが正常に処理されるかどうかが決まります。
  • 空のフォルダを定期的に削除する: 特に、オブジェクトのライフサイクル管理を使用している場合や、親フォルダを明示的に削除せずにオブジェクトを削除している場合は、空のフォルダが蓄積する可能性があります。フォルダが蓄積されると、オブジェクトのリスト表示オペレーションやその他のフォルダ関連オペレーションのパフォーマンスに影響する可能性があります。空のフォルダを削除する方法はいくつかあります。

    • Cloud Storage FUSE または Cloud Storage コネクタを使用して、階層型名前空間で有効になっているバケットを操作する場合、ディレクトリを削除すると、バケット内の対応するフォルダも削除されます。
    • Google Cloud コンソールまたは Google Cloud CLI を使用する場合は、再帰削除を使用してフォルダを自動的に削除できます。
    • スクリプトまたは自動プロセスを使用して、空のフォルダを定期的に削除できます。次のスクリプトは、空のフォルダを削除する基本的な方法を示しています。このスクリプトはフォルダを順番に削除するため、大きなバケットでは時間がかかることがあります。本番環境用にスクリプトを最適化することを検討してください。また、マネージド フォルダとそれに関連付けられた IAM ポリシーを含む、空のフォルダ(暗黙的または明示的に作成されたもの)がすべて削除されます。特定のフォルダとマネージド フォルダを保持する必要がある場合は、保持するリソースに基づいてスクリプトを調整します。

      # List all the folders under <bucket>/<prefix> and export results into
      # folders.txt
      gcloud storage folders list gs://<bucket>/<prefix> | grep storage_url | sed 's/storage_url: //' > folders.txt
      
      # Reverse the folder list and export results into folders-reverse.txt
      sed '1!G;h;$!d' folders.txt > folders-reverse.txt
      
      # Try deleting each folder in the reverse order (to guarantee child
      # folders are deleted before parent folders). This will fail for
      # non-empty folders, so only empty folders will be deleted
      xargs -I{} gcloud storage folders delete "{}" < folders-reverse.txt
      

次のステップ