对象业务的修改元数据接口

如下是官方文档中针对元数据的说明。

After you upload the object, you cannot modify object metadata. The only way to modify object metadata is to make a copy of the object and set the metadata.

对象的元数据仅在上传对象时或者复制对象时支持修改,在某些场景下使用不方便,因此提供更新元数据能力成为一种刚需。
本文有如下假定:

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

接口定义

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

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

  • 华为云OBS
  • 火山引擎

华为云OBS的修改对象元数据为例,接口定义如下:

PUT /ObjectName?metadata HTTP/1.1
Host: bucketname.obs.region.myhuaweicloud.com
Content-Type: application/xml
Content-Length: length
Authorization: authorization
Date: date
<Optional Additional Header>

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

  • 对象名,指定修改元数据的对象名。
  • 操作名,参数名为metadata,不需要指定参数值。
  • 对象版本,参数名为versionId,依据实际情况指定。
  • 操作指标,HTTP头部x-obs-metadata-directive,支持REPLACE_NEWREPLACE

本接口允许修改的元数据,比如:

  • HTTP协议的标准头部
    • Cache-Control
    • Expires
    • Content-Encoding
    • Content-Disposition
    • Content-Type
    • Content-Language
  • 用户元数据
    • x-obs-website-redirect-location
    • x-obs-meta-*
  • 系统元数据
    • x-obs-storage-class
    • x-obs-expires

考虑到对象的tagging支持修改,因此不需要在本接口中再提供额外的实现。

实现思路

ETag

参考AWS S3数据一致性,ETag基于对象的数据,使用MD5算法计算得到。
修改元数据的操作不涉及数据的变更,因此无需更新MD5值。

多版本

按照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:ObjectMetadataUpdated:Put

依据AWS S3 消息格式,为了适配修改元数据操作,可以考虑在object中增加扩展对象metadata,使用KV格式,用于说明修改元数据操作。
在官方样例基础上增加必要的字段,得到如下样例:

{"Records":[{"eventVersion":"2.2","eventSource":"aws:s3","awsRegion":"us-west-2","eventTime":"The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z, when Amazon S3 finished processing the request","eventName":"event-type","userIdentity":{"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"},"requestParameters":{"sourceIPAddress":"ip-address-where-request-came-from"},"responseElements":{"x-amz-request-id":"Amazon S3 generated request ID","x-amz-id-2":"Amazon S3 host that processed the request"},"s3":{"s3SchemaVersion":"1.0","configurationId":"ID found in the bucket notification configuration","bucket":{"name":"bucket-name","ownerIdentity":{"principalId":"Amazon-customer-ID-of-the-bucket-owner"},"arn":"bucket-ARN"},"object":{"key":"object-key","size":"object-size in bytes","eTag":"object eTag","versionId":"object version if bucket is versioning-enabled, otherwise null","sequencer": "a string representation of a hexadecimal value used to determine event sequence, only used with PUTs and DELETEs","metadata":[{name:"Cache-Control",value:""},{name:"Expires",value:""},{name:"Content-Encoding",value:""},{name:"Content-Disposition",value:""},{name:"Content-Type",value:""},{name:"Content-Language",value:""}]}}}]
}

并发一致性

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

当多客户端对相同对象并发的发起修改元数据的操作时,以最后一次请求的操作结果为准。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个弹出的虚假安全警告去除

虚假的安全警告 poratus.azurewebsites.net Pornographic spyware detected! Remove viruses with Avira Antivirus 通过 Microsoft Edge GPT-4 (OpenAI) 这个提示可能是一个虚假的安全警告&#xff0c;被称为“恐吓软件”&#xff08;scareware&#xff09;&#xff0c;旨在…

2024年上半年高级信息系统项目管理师考后总结

复习了大概两个月&#xff0c;终于度过了这场考试。又是加班996&#xff0c;又是复习听课写论文做真题&#xff0c;真心累。没办法&#xff0c;年纪大了&#xff0c;不考考证&#xff0c;没法混啊。 所以&#xff0c;建议大家趁年轻&#xff0c;必须必须必须把高级软考的证给拿…

名下企业查询,清晰明了;在线操作,方便快捷

在现代社会&#xff0c;越来越多的人开始涉足创业和投资&#xff0c;拥有自己的企业成为一种时尚。然而&#xff0c;随之而来的是繁琐的企业注册流程和复杂的信息查询。为了解决这个问题&#xff0c;挖数据平台推出了一项名下企业查询接口&#xff0c;提供了一种方便快捷的方式…

pytorch onnx ncnn间的关系

PyTorch、ONNX 和 NCNN 是深度学习领域中的三个重要工具或框架&#xff0c;它们在模型开发、转换和部署过程中扮演着不同但相互关联的角色。以下是它们之间的关系和各自的作用&#xff1a; PyTorch 角色 PyTorch 是一个开源的深度学习框架&#xff0c;由 Facebooks AI Resea…

计算机网络介绍

计算机网络介绍 概述网络概述相关硬件 链路层VLAN概念VLAN 特点VLAN 的划分帧格式端口类型原理 STP概念特点原理 Smart Link概念特点组网 网络层ARP概念原理 IP概念版本IP 地址 IPv4IP 地址数据报格式 IPv6特点IP 地址数据报格式 ICMP概念分类报文格式 VRRP概念原理报文格式 OS…

MySQL创建新用户并设置新密码

创建新用户并设置新密码的步骤在 MySQL 中相对直接。以下是具体步骤&#xff1a; 登录到 MySQL&#xff1a; 打开终端或命令行界面&#xff0c;使用以下命令以 root 用户或其他具有足够权限的用户登录到 MySQL 服务器&#xff1a; mysql -u root -p输入 root 用户的密码。 选择…

echarts中api返回数据的结构是时间和数据是两个数组返回的如何使用

如果ECharts的API返回的数据结构是时间和数据分别作为两个数组返回的&#xff0c;你可以将这两个数组分别赋值给x轴和y轴的数据。 例如&#xff0c;假设API返回了以下两个数组&#xff1a; const timeData [2022-01-01, 2022-01-02, 2022-01-03]; const valueData [10, 20,…

片上电控系统集成技术

一、背景 片上电机控制系统集成技术&#xff08;On-Chip Motor Control System Integration&#xff09;是一种先进的电子工程技术&#xff0c;它主要聚焦于将复杂的电机控制算法和硬件组件整合到单一集成电路&#xff08;IC&#xff09;中&#xff0c;以便于高效、精确地管理…

计算机毕业设计 | 基于Koa+vue的高校宿舍管理系统宿舍可视化系统

项目介绍 项目背景 随着科技的发展&#xff0c;智能化管理越来越重要。大学生在宿舍的时间超过了1/3&#xff0c;因此良好的宿舍管理对学生的生活和学习极为关键。学生宿舍管理系统能够合理安排新生分配宿舍&#xff0c;不浪费公共资源&#xff0c;减轻学校管理压力&#xff…

9.1JavaEE——Spring JDBC

一、JDBCTemplate概述 1、JDBCTemplate作用 针对数据库操作&#xff0c;Spring框架提供了JdbcTemplate类&#xff0c;JdbcTemplate是一个模板类&#xff0c;Spring JDBC中的更高层次的抽象类均在JdbcTemplate模板类的基础上创建。 JdbcTemplate类提供了操作数据库的基本方法&a…

计算机视觉与深度学习实战,Python工具,深度学习的视觉场景识别

一、引言 随着人工智能技术的快速发展,计算机视觉和深度学习已成为当今最热门的研究领域之一。在计算机视觉中,视觉场景识别是一项重要的任务,旨在通过计算机对图像或视频中的场景进行自动分类和理解。Python作为一种强大的编程语言,结合深度学习框架,为计算机视觉领域的研…

关于工作组

什么是局域网&#xff08;内网&#xff09; 我们常说的内网指的就是局域网&#xff0c;局域网&#xff08;Local Area Network&#xff0c;简称LAN&#xff09;是指在相对较小的地理范围内&#xff0c;如一个办公室、学校、住宅区或建筑群内部&#xff0c;通过通信设备&#xf…

STL的pair知识点大全

1&#xff1a;set容器set.equal range(elem) 1.上限是闭区间&#xff0c;下限是开区间&#xff0c;如[beg,end)返回容器中与elem相等的上下限的两个迭代器&#xff0c;pair中。函数返回两个迭代器&#xff0c;而这两个迭代器被封装在pair中。 pair< set<int>::iterat…

如何快速入门使用Vue.js

目录 学习步骤具体案例案例一&#xff1a;Todo List 应用案例二&#xff1a;用户管理系统 学习步骤 基础知识&#xff1a; HTML/CSS/JavaScript&#xff1a;掌握基本的网页结构、样式和交互是必须的。ES6&#xff1a;了解现代JavaScript的特性&#xff0c;如箭头函数、解构赋值…

vue3 diff源码梳理学习笔记

1、只比较同层 2、双端比较 3、判断流程 1、先判断是否是首次渲染&#xff1b; 2、vnode oldvnode 指向同一个对象&#xff1f; 3、oldvnode dom 关联到真实的元素上&#xff0c;依次更新dom上的属性&#xff0c;class style props events; 4、针对简单的文本节点 只需要更新…

上位机图像处理和嵌入式模块部署(f407 mcu中tf卡读写和fatfs挂载)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很早之前&#xff0c;个人对tf卡并不是很重视&#xff0c;觉得它就是一个存储工具而已。后来在移植v3s芯片的时候&#xff0c;才发现很多的soc其实…

如何监控慢 SQL?

引言&#xff1a;在开发和维护数据库驱动的应用程序时&#xff0c;监控慢 SQL 查询是确保系统性能和稳定性的关键一环。慢 SQL 查询可能会导致系统性能下降、资源浪费和用户体验差等问题。因此&#xff0c;及时监控和优化慢 SQL 查询对于保障系统的正常运行和用户满意度至关重要…

k8s 1.28.x 配置nfs

1.安装nfs&#xff0c;在每个节点上安装 yum install -y nfs-utils 2.创建共享目录(主节点上操作) mkdir -p /opt/nfs/k8s 3.编写NFS的共享配置 /opt/nfs/k8s *(rw,no_root_squash) #*代表对所有IP都开放此目录&#xff0c;rw是读写 4.启动nfs systemctl enable nfs-ser…

动态代理(黑马笔记)

一、BigStar 大明星类 package com.itheima.mydynamicproxy1; public class BigStar implements Star {//实现接口要重写里边的抽象方法private String name;public BigStar() {}public BigStar(String name) {this.name name;}//唱歌Override //表示重写接口中的方法public…

Java面试题:解释一下Java中的synchronized关键字,它是如何保证线程安全的?

在Java中&#xff0c;synchronized关键字是一种同步锁机制&#xff0c;用于确保多个线程在访问共享资源时能够保持线程安全。线程安全是指在多线程环境下&#xff0c;当多个线程尝试同时访问共享资源时&#xff0c;任何时刻最多只有一个线程能够执行特定的代码段。 synchroniz…