Amazon S3对象存储 多版本支持

Amazon S3的bucket中,可以支持同时保留一个对象的多个版本的变体。

bucket通过对象的Version ID来标识对象版本信息。打开多版本之前,对象的Version ID被设置为null。打开多版本之后,对象不会立刻发生变化,而是在收到新变更请求后,才会发生变化。

bucket对多版本的支持,有3种模式可以选择,它们的主要区别是,对不指定具体Version ID的操作方式。

  1. Unversioned (the default):不支持对象多版本,每次对象操作Version ID均为null。
  2. Versioning-enabled:强制对象多版本,即使不指定Version ID,每次对象操作系统也会为其分配具体唯一的Version ID。
  3. Versioning-suspended:非指定即为null的多版本控制,如果不指定Version ID,系统便认为其Version ID为null。

unversioned --> versioning-enabled <--> versioning-suspended

versioning-enabled和versioning-suspended模式的bucket可以相互转换,但都无法回退到unversioned模式。

       下面介绍对象在添加、删除和读取时,不同versioning类型,其Version ID的处理方式。

       unversioned模式,不支持对象多版本,对象每次操作的Version ID都为null,添加和删除都会覆盖旧值,读取只读取最新的值,故不做过多讨论。

1. Add Objects Versions

【Adding objects to versioning-enabled buckets】:Adding objects to versioning-enabled buckets - Amazon Simple Storage Service

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled.png

       向versioning-enabled buckets添加object时,存储会每次默认为对象,分配一个具体唯一的版本号。

【Adding objects to versioning-suspended buckets】:Adding objects to versioning-suspended buckets - Amazon Simple Storage Service

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended.png

       向versioning-suspended bucket添加object时,如果不指定Version ID,默认指定null。如果已有Version ID为null的相同key的对象,则会对其进行覆写。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended3.png

       如果指定Version ID,并已有相同key和版本的对象,则指定版本号会被设置为null。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended4.png

       如果已有相同key的null版本,则会覆写上一个null版本。

2. Delete Objects Versions

【Deleting object versions from a versioning-enabled bucket】:Deleting object versions from a versioning-enabled bucket - Amazon Simple Storage Service

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png

       从versioning-enabled bucket中删除对象时,如果不指定Version ID,则并不会删除之前的任何版本,而是插入一个新Version ID的delete marker作为对象的当前版本。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png

       要想真正删除对象版本,则必须指定版本号,DELETE Object versionId。

【Deleting objects from versioning-suspended buckets】:

Deleting objects from versioning-suspended buckets - Amazon Simple Storage Service

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspended.png

       从versioning-suspended的bucket删除对象,不指定Version ID时,便认为是要删除对象的null版本。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspendedNoNull.png

       如果对象没有的null版本,则会增加一个Version ID为null的Delete Marker版本,即读取对象且不指定版本时,会读取到这个Version ID为null的Delete Marker版本。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png

       删除对象时指定版本,则只会删除对象的指定版本。

3. Get Objects Versions

【Retrieving object versions from a versioning-enabled bucket】:Retrieving object versions from a versioning-enabled bucket - Amazon Simple Storage Service

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_GET_NoVersionID.png

       从versioning-enabled bucket中,读取对象,如果不指定Version ID,则返回对象的最新current版本。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_GET_Versioned.png

       如果指定Version ID,则会返回对应的版本。

【Retrieving objects from versioning-suspended buckets】:Retrieving objects from versioning-suspended buckets - Amazon Simple Storage Service

https://docs.aws.amazon.com/AmazonS3/latest/userguide/images/versioning_GET_suspended.png

       从versioning suspened bucket中读取对象,如果不指定Version ID,则返回null版本,指定Version ID则返回对象的指定版本。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值