对象业务的重命名接口

依据AWS S3,没有定义重命名对象的操作。

本文有如下假定:

  • 对象存储服务基于文件语义实现。

接口定义

依据前述,业界主流对象存储服务比如AWS S3并未定义重命名对象的操作,而国内的各家公有云对象存储服务,提供了对象的重命名操作。

国内的公有云对象存储服务,相关操作的文档的链接(排名不分先后),如下:

华为云OBS重命名对象为例,接口定义如下:

POST /ObjectName?name=Name&rename HTTP/1.1
Host: bucketname.obs.region.myhuaweicloud.com
Authorization: authorization
Date: date

本接口的关键参数,如下:

  • 对象名,指定对象名。
  • 目标对象名,指定修改后的对象名。
  • 操作名,参数名为rename,不需要指定参数值。

实现思路

重命名对象的操作,采用Linux命令模拟时,可以有如下方式:

  • 方案一,即先复制、再删除原文件。
    cp A B
    rm -f A
    
  • 方案二,移动文件。
    mv A B
    

不涉及文件系统中inode的变化,仅处理文件系统中目录的元数据,因此基本不受文件大小的影响。

ETag

参考AWS S3数据一致性ETag基于对象的数据,使用MD5算法计算得到。

由于修改名称不涉及数据的变更,因此无需更新对象的ETag

多版本

按照AWS S3多版本中的说明,多版本特性的开关作用在桶级,包含如下状态:

Buckets can be in one of three states:

  • Unversioned (the default)
  • Versioning-enabled
  • Versioning-suspended

原对象关联的所有版本,均需要关联到最新的对象名。

分级

参考AWS S3 归档AWS S3 分级中的说明,处于归档状态的对象,需要先取回才能访问。
显而易见,此处为了维护对象语义,照顾对象存储服务的实现,当对象处于归档状态时,不允许更新对象。

WORM

参考AWS S3 Object Lock中的说明,开启WORM后:

  • 在保护期内的对象,不允许修改,不允许删除。
  • 在保护期外的对象,不允许修改,允许删除。

因此从维护对象语义的角度讲,在保护期内的对象、保护期外的对象,均不允许修改对象。

生命周期

参考AWS S3 Lifecycle,修改元数据操作的对象可能符合生命周期规则,从而被恰好正在运行的后台任务删除掉。
此时有如下选择:

  • 生命周期的后台任务具备更高的优先级,提前中断操作,正常删除掉对象,对象存储服务对客户应用返回操作失败。
  • 生命周期的后台任务优先级相对较低,跳过当前对象,待下次运行时再决策是否删除。

数据加密

依据SSE-C的说明,客户应用在执行PUT/GET/Head/Copy操作时,均需要提供加密数据的密钥。

即在发起请求时,提供如下头部:

  • x-amz-copy-source​-server-side​-encryption​-customer-algorithm
  • x-amz-copy-source​-server-side​-encryption​-customer-key
  • x-amz-copy-source-​server-side​-encryption​-customer-key-MD5

如前所述,本操作只涉及对象名的变更,不涉及元数据和数据的变化,因此不涉及加密的处理。

事件通知

依据AWS S3 事件通知中的说明,对象存储服务可以提供事件通知,目前支持的事件类型见文档,显然不包括重命名操作,可以扩展事件名,比如s3:ObjectUpdated:Put

并发一致性

依据AWS S3 data consistency model的说明,对象存储服务提供read-after-write的模型。

当多客户端对相同对象并发的发起重命名操作时,参照文件语义,提供最终一致性。

相关推荐

  1. 对象业务命名接口

    2024-06-09 18:14:05       35 阅读
  2. 对象存储服务中对象业务非标接口

    2024-06-09 18:14:05       29 阅读
  3. 43.bug:mapper接口参数使用@param命名导致错误

    2024-06-09 18:14:05       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 18:14:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 18:14:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 18:14:05       82 阅读
  4. Python语言-面向对象

    2024-06-09 18:14:05       91 阅读

热门阅读

  1. 简单的项目部署脚本(转载)

    2024-06-09 18:14:05       21 阅读
  2. Django按照文章ID更新文章

    2024-06-09 18:14:05       31 阅读
  3. 2903. 找出满足差值条件的下标 I

    2024-06-09 18:14:05       26 阅读
  4. 更新pip版本(在自己工程中的虚拟环境中)

    2024-06-09 18:14:05       28 阅读
  5. OpenVINO™ 助力 Qwen 2 —— 开启大语言模型新时代

    2024-06-09 18:14:05       33 阅读
  6. Linux防火墙配置001

    2024-06-09 18:14:05       23 阅读
  7. 解释关系型数据库和非关系型数据库的区别

    2024-06-09 18:14:05       26 阅读
  8. MySQL数据库基础练习系列2、图书借阅管理系统

    2024-06-09 18:14:05       29 阅读
  9. Git退出账号命令的使用方法

    2024-06-09 18:14:05       28 阅读
  10. 微信小程序【WXML】

    2024-06-09 18:14:05       30 阅读