OSS分层命名空间功能,将对象(Object)组织到多级目录层级结构中,使得重命名目录或文件成为单个原子操作,无需列举和处理共享目录名称前缀的所有对象。与原Bucket内部扁平命名空间中使用正斜线+文件名的方式模拟文件夹相比,分层命名空间功能极大地提高了目录管理操作的性能。

功能优势

  • 原子目录操作

    在OSS扁平命名空间没有真实目录的情况下,应用程序可能需要处理数百万个单独的对象才能完成目录级任务。 相比之下,分层命名空间可通过更新单个父目录批量处理多个任务。

  • 性能优化

    与OSS扁平命名空间相比,分层命名空间不需要在分析数据前,对数据进行复制或转换,因此极大地提高了目录管理操作的性能。分层命名空间对于大数据分析框架尤为重要,例如Hive、Spark等工具在作业过程中通常将输出结果写入临时路径,然后在作业结束时需要对该位置进行重命名。 如果没有分层命名空间,该场景下重命名操作通常比分析过程本身更耗时。

操作方式

仅允许在创建Bucket时开启分层命名空间功能,且开启后不支持关闭。开启分层命名空间的具体操作,请参见创建存储空间

您可以通过以下两种方式在开启了分层命名空间的Bucket中创建目录、并进行目录的重命名或删除操作。

操作方式 说明
控制台 Web应用程序,直观易用
Java SDK 简单易用的SDK demo

注意事项

  • 支持地域

    目前仅支持在澳大利亚(悉尼)、美国(硅谷)、日本(东京)、印度(孟买)、英国(伦敦)、马来西亚(吉隆坡)地域开启分层命名空间。

  • 创建目录

    设置的目录绝对路径(DirectoryName)中不能出现连续的正斜线(/)。

    目录不支持传入数据,目录的Content-Length固定为0。

    目录的Content-Type固定为application/x-directory,无法修改。

  • 重命名目录或文件

    重命名后的目录或文件不能与同一个Bucket下已存在的目录或者文件重名。

    重命名后的目录或文件,其父级目录必须存在。例如目录重命名为destfolder/examplefolder/test,则Bucket中必须存在destfolder/examplefolder

  • 删除目录
    • 递归删除

      递归删除用于删除目录下的文件和子目录。使用递归删除方式删除目录时,您必须拥有目录以及该目录下所有文件和子目录的DeleteObject权限。

      例如要递归删除dest目录下的子目录testfolder及其包含的所有文件,您必须拥有dest/testfolderdest/testfolder/*DeleteObject权限。

      注意 使用递归删除方式删除目录时,如果同时存在向目录的并发写请求,则可能导致目录删除失败。
    • 非递归删除

      非递归删除用于删除空目录。使用非递归方式删除目录时,您必须拥有目录的DeleteObject权限。

不支持的功能

在开启了分层命名空间的Bucket中,不支持使用以下功能:

分类 说明
Bucket级别的功能
  • 跨区域复制
  • 版本控制
  • 存储空间清单
  • 跨域资源共享
  • 静态网站托管
  • 生命周期
  • 合规保留策略
  • 传输加速
Object级别的功能
  • 软链接
  • 追加上传
  • 目录不支持读写权限(ACL)和标签(Tagging)
  • 图片处理
  • 存储类型为归档或冷归档
  • 回调(Callback)
  • 解冻归档或冷归档文件(RestoreObject
  • 禁止覆盖同名文件参数(x-oss-forbid-overwrite
  • 通过GetObject获取目录时不支持设置response-content-*
  • LiveChannel相关操作
  • 批量删除(DeleteMultipleObjects
  • 选取文件(SelectObject