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

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

オブジェクトの一覧表示

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

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

フォルダ管理

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

  • フォルダ構造を事前に作成する: オブジェクトのアップロード、書き換え、作成オペレーション中にフォルダを自動作成するのではなく、フォルダ作成オペレーションを使用して、目的のフォルダ構造を事前に取得します。フォルダ構造を事前に作成すると、パフォーマンスの一貫性と予測可能性が向上します。
  • フォルダあたりのオブジェクト比率を最大化する: フォルダの作成と管理に関連するオーバーヘッドを削減するため、フォルダあたりのオブジェクトの比率を大きくします。
  • フォルダの作成および削除リクエストを制限する: フォルダの作成または削除は、その階層的な性質から、個々のオブジェクトを操作するよりもリソースを消費します。スムーズなパフォーマンスを確保するため、Cloud Storage ではこれらのオペレーションをバケットごとに 1,000 リクエスト/秒に制限しています。この上限を超えるリクエストは明示的には制限されませんが、リソースの可用性によって、リクエストが正常に処理されるかどうかが決まります。
  • 空のフォルダを定期的に削除する: 特に、オブジェクトのライフサイクル管理を使用している場合や、親フォルダを明示的に削除せずにオブジェクトを削除する場合は、空のフォルダが蓄積する可能性があります。フォルダが蓄積されると、オブジェクトの一覧表示オペレーションやその他のフォルダ関連オペレーションのパフォーマンスに影響する可能性があります。空のフォルダを削除するには以下のような方法があります。
    • Cloud Storage FUSE または Cloud Storage コネクタを使用して、階層型名前空間が有効になっているバケットを操作する場合、ディレクトリを削除すると、バケット内の対応するフォルダも削除されます。
    • Google Cloud コンソールまたは Google Cloud CLI を使用する場合は、再帰削除を使用してフォルダを自動的に削除できます。
    • delete_empty_folders.py スクリプトを使用すると、並列処理を使用して空のフォルダを定期的に削除できます。このスクリプトには、特定のフォルダパス接頭辞を対象にするオプションがあります。これにより、スクリプトはバケットのディレクトリ構造のサブセットに対してフォルダの削除を実行できます。また、マネージド フォルダとそれに関連付けられた IAM ポリシーを含む、すべての空のフォルダ(暗黙的または明示的に作成されたもの)を削除します。このスクリプトの使用方法の詳細については、GitHub の README をご覧ください。

次のステップ