2016-11-19 73 views
5

AWS的S3文档S3最后修改的时间戳指出:为最终一致覆盖PUT操作

亚马逊S3提供最终一致性的覆盖放,在所有地区删除操作。

http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel

的入库时间,直到完全一致达到可以变化。在此期间GET请求可能会返回先前的对象或udpated对象。

我的问题是:

当最后一次修改的时间戳更新?在覆盖PUT成功后立即更新,但在之前达到完全一致性,还是仅在达到完全一致性后才更新?

我怀疑前者,但我找不到任何明确指出这一点的文档。

+0

@JohnRotenstein我很欣赏好心的报价编辑,但只有第一句话来自AWS文档。开始“直到...的时间跨度”这句话是我自己写的。请回复,以免误导人们。谢谢。 – andrasp

回答

2

Last-Modified时间戳应该匹配成功的PUT请求的响应头中返回的Date值。

据我所知,这没有明确记录,但它可以从记录中得到。

当您覆盖一个对象时,它不是可能被最终一致性模型延迟的覆盖本身 - 它是给定S3节点上覆盖的内容的可用性(S3被复制到S3中的多个节点地区)。

与其他元数据一样,Last-Modified时间戳在对象创建时建立,此后不可变。

它实际上并不是对象的“修改”时间,而是对象的创建时间。这个解释可能听起来很迂腐,但从最严格的意义上讲它是准确的:S3对象及其元数据根本不可能被修改,它们只能被覆盖。当你在S3中“覆盖”一个对象时,你实际上做的是创建一个新对象,重用旧对象的键(路径+文件名)。在给定的S3节点(复制)上这个新对象的可用性是可能由最终一致性模型推迟的......而不是实际创建覆盖旧的对象的新对象......因此将不存在Last-Modified的原因会受复制延迟的影响(假设复制延迟 - 最终一致性有时可能与立即一致性无法区分)。