优化启用了分层命名空间的存储分区中的性能

本页面提供了有关如何优化启用了分层命名空间的存储分区的性能的指南。

列出对象

以下是列出对象的性能注意事项:

  • 在启用了分层命名空间的存储桶中,列出整个存储桶的所有对象或带有前缀的对象会消耗大量资源,因为该操作必须遍历每个文件夹和子文件夹,类似于文件系统中的 ls -r 命令。因此,如果存储桶中的文件夹越多,列出对象的速度就越慢。大量空文件夹也可能会对对象列表性能产生负面影响。为避免对性能产生负面影响,我们建议您尽可能增加每个文件夹中的对象数量,并定期删除空文件夹。
  • 在已启用分层命名空间的存储分区中,使用分隔符和特定前缀列出或检索特定文件夹中的对象和子文件夹会更高效,因为对象会在文件夹结构中进行整理。如需在使用分隔符和特定前缀时优化商品详情性能,请设置 includeFoldersAsPrefixes 参数。否则,Cloud Storage 会执行额外的检查来排除空文件夹,这可能会导致操作速度变慢。如需详细了解如何在列出对象时使用 includeFoldersAsPrefixes,请参阅列出对象

文件夹管理

为了高效管理文件夹,我们建议您执行以下操作:

  • 预创建文件夹结构:请使用“创建文件夹”操作提前获取预期的文件夹结构,而不是依赖于在对象上传、重写和组合操作期间自动创建文件夹。预先创建文件夹结构可提高性能一致性和可预测性。
  • 最大限度地提高每个文件夹中的对象数比率:应力求提高对象与文件夹的比率,因为这有助于减少与文件夹创建和管理相关的开销。
  • 限制文件夹创建和删除请求:由于文件夹具有层次结构,因此创建或删除文件夹比处理单个对象需要更多的资源。为确保顺畅运行,Cloud Storage 将每个存储桶的这些操作限制为每秒 1, 000 个请求。超出此限制的请求不会被明确限制,但能否成功处理取决于资源可用性。
  • 定期删除空文件夹:空文件夹可能会累积起来,尤其是在使用对象生命周期管理功能或删除对象但未明确删除其父级文件夹时。累积的文件夹可能会影响对象列表操作和其他与文件夹相关的操作的性能。 以下是一些可用于删除空文件夹的方法:

    • 当您使用 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
      

后续步骤