全部产品
Search
文档中心

对象存储 OSS:使用分层命名空间

更新时间:Feb 26, 2024

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

功能优势

  • 原子目录操作

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

  • 性能优化

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

操作步骤

  1. 开启分层命名空间。

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

  2. 在分层命名空间的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