啟用階層命名空間後,如何提升 bucket 的效能

本頁提供相關指引,說明如何啟用階層式命名空間,並盡可能提升值區效能。

列出物件

以下是清單物件的效能考量:

  • 在啟用階層式命名空間的 bucket 中,列出整個 bucket 或具有前置字元的所有物件會耗用大量資源,因為這項作業必須遍歷每個資料夾和子資料夾,類似於檔案系統中的 ls -r 指令。因此,如果 bucket 中的資料夾較多,物件清單的速度就會較慢。大量空白資料夾也會對物件列出效能造成負面影響。為避免對效能造成負面影響,建議您盡量在每個資料夾中放入大量物件,並定期刪除空資料夾。
  • 在啟用階層式命名空間的 bucket 中,使用分隔符和特定前置字串列出或擷取特定資料夾中的物件和子資料夾,效率會更高,因為物件會整理在資料夾結構中。如要在使用分隔符號和特定前置字元時,盡可能提升商品資訊成效,請設定 includeFoldersAsPrefixes 參數。否則,Cloud Storage 會執行額外檢查來排除空白資料夾,這可能會導致作業變慢。如要進一步瞭解如何列出物件時使用 includeFoldersAsPrefixes,請參閱「列出物件」。

資料夾管理

為有效管理資料夾,建議您採取下列做法:

  • 預先建立資料夾結構:不要在物件上傳、重寫和組合作業期間依賴自動建立資料夾,請使用建立資料夾作業預先取得預期的資料夾結構。預先建立資料夾結構可提升效能一致性和可預測性。
  • 盡量提高每個資料夾的物件比率:盡量提高物件與資料夾的比率,因為這樣可減少與建立及管理資料夾相關的負擔。
  • 限制資料夾建立和刪除要求:由於資料夾具有階層式性質,因此建立或刪除資料夾比處理個別物件更耗用資源。為確保效能順暢,Cloud Storage 會將每個值區的這類作業限制為每秒 1000 個要求。超過這項限制的要求不會遭到明確限制,但資源可用性會決定要求是否能順利處理。
  • 定期刪除空白資料夾:空白資料夾可能會累積,特別是使用物件生命週期管理或刪除物件時,如果沒有明確刪除父項資料夾,就可能發生這種情況。累積的資料夾可能會影響物件列出作業和其他資料夾相關作業的效能。 以下是刪除空白資料夾的幾種方法:

    • 使用 Cloud Storage FUSECloud 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
      

後續步驟