swift支持对象版本(归档)管理,但是,主要有两种不同的方式去实现:
1、PUT这样的header:"X-History-Location:history_container"到current_container。表明history_container是被put数据的current_container的历史库。current_container里面的每个object,可以重复进行put,如果里面已经有了这个object,那么老的历史版本就会出现在history_container里面,其中这个归档的object在history_container里面的命名规则为:[xxx][ObjectName]/[timestamp],其中xxx为ObjectName的长度,使用16进制表示,ObjectName则为原对象名称,timestamp则为归档的时间。比如current里面有一个versiontest.xml的obeject,那么第二次被put之后,归档库里面的object名称则是:00fversiontest.xml/1520240118.12936。
2、PUT这样的header:"X-Versions-Location:version_container"到current_container。表明version_container是被put数据的current_container的归档库。current_container里面的每个object,可以重复进行put,如果里面已经有了这个object,那么老的历史版本就会出现在version_container里面,其中这个归档的object在version_container里面的命名规则为:[xxx][ObjectName]/[timestamp],其中xxx为ObjectName的长度,使用16进制表示,ObjectName则为原对象名称,timestamp则为归档的时间。比如current里面有一个versiontest.xml的obeject,那么第二次被put之后,归档库里面的object名称则是:00fversiontest.xml/1520240118.12936。
两种用法都可以使用,但是有细微的差别:如下:
用法 | X-History-Location | X-Versions-Location |
二次put | 老版本进入归档库 | 老版本进入归档库 |
delete当前库的object | 历史版本不变 | 老版本还原到当前库 |
从当前库删除 | 一次删除即可,但是历史版本仍留在历史库 | 有多少个历史版本就需要清理多少次 |