分层命名空间 HNS(Hierarchical NameSpace,简称分层桶)是对象存储 TOS 推出的一个全新的基于分层元数据管理的桶类型。在提供分层命名空间能力的同时兼顾了对象扁平化扩展性,提供对象语义与文件语义透明互通的能力,实现真正的一份数据多种访问协议,提升数据使用效率。
相比原来扁平命名空间 FNS(Flat NameSpace,简称扁平桶)可以很好的支持目录级别的 mv 与 rename 操作,同时优化常见读操作 List 与目录 Head,提升数据处理效率与性能,能很好的满足大数据、数据湖和 AI 领域的使用场景。
本文介绍如何通过 TOS Java SDK 的 renameObject
接口指将指定的一个对象重命名为其他对象名。
以下代码展示如何重命名一个对象。
import com.volcengine.tos.TOSV2; import com.volcengine.tos.TOSV2ClientBuilder; import com.volcengine.tos.TosClientException; import com.volcengine.tos.TosServerException; import com.volcengine.tos.model.object.RenameObjectInput; import com.volcengine.tos.model.object.RenameObjectOutput; public class HNSRenameObjectExample { public static void main(String[] args) { String endpoint = "your endpoint"; String region = "your region"; String accessKey = System.getenv("TOS_ACCESS_KEY"); String secretKey = System.getenv("TOS_SECRET_KEY"); String bucketName = "bucket-example"; String objectKey = "example_dir/example_object.txt"; String renamedObjectKey = "example_dir/example_object_rename.txt"; TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey); try{ RenameObjectInput input = new RenameObjectInput().setBucket(bucketName).setKey(objectKey) .setNewKey(renamedObjectKey); RenameObjectOutput output = tos.renameObject(input); System.out.println(output.getRequestInfo().getRequestId()); System.out.println("renameObject succeed."); } catch (TosClientException e) { // 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送 System.out.println("renameObject failed"); System.out.println("Message: " + e.getMessage()); if (e.getCause() != null) { e.getCause().printStackTrace(); } } catch (TosServerException e) { // 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息 System.out.println("renameObject failed"); System.out.println("StatusCode: " + e.getStatusCode()); System.out.println("RequestID: " + e.getRequestID()); } catch (Throwable t) { // 作为兜底捕获其他异常,一般不会执行到这里 System.out.println("renameObject failed"); System.out.println("unexpected exception, message: " + t.getMessage()); } } }
以下代码展示如何重命名一个目录。
import com.volcengine.tos.TOSV2; import com.volcengine.tos.TOSV2ClientBuilder; import com.volcengine.tos.TosClientException; import com.volcengine.tos.TosServerException; import com.volcengine.tos.model.object.RenameObjectInput; import com.volcengine.tos.model.object.RenameObjectOutput; public class HNSRenameDirExample { public static void main(String[] args) { String endpoint = "your endpoint"; String region = "your region"; String accessKey = System.getenv("TOS_ACCESS_KEY"); String secretKey = System.getenv("TOS_SECRET_KEY"); String bucketName = "bucket-example"; String objectKey = "source_dir"; String renamedObjectKey = "dest_dir"; TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey); try{ RenameObjectInput input = new RenameObjectInput().setBucket(bucketName).setKey(objectKey) .setNewKey(renamedObjectKey); RenameObjectOutput output = tos.renameObject(input); System.out.println(output.getRequestInfo().getRequestId()); System.out.println("renameObject succeed."); } catch (TosClientException e) { // 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送 System.out.println("renameObject failed"); System.out.println("Message: " + e.getMessage()); if (e.getCause() != null) { e.getCause().printStackTrace(); } } catch (TosServerException e) { // 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息 System.out.println("renameObject failed"); System.out.println("StatusCode: " + e.getStatusCode()); System.out.println("RequestID: " + e.getRequestID()); } catch (Throwable t) { // 作为兜底捕获其他异常,一般不会执行到这里 System.out.println("renameObject failed"); System.out.println("unexpected exception, message: " + t.getMessage()); } } }
关于 RenameObject 的 API 文档,请参见 RenameObject。