AWS S3 docs声明:
Amazon S3提供了在所有地区覆盖PUTS和DELETES的最终一致性。
http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel
达到完全一致性的时间跨度可能会有所不同。在此期间,GET请求可能会返回上一个对象或udpated对象。
我的问题是:
最后修改时间戳何时更新?是否在覆盖PUT成功后立即更新但在达到完全一致性之前更新,或者仅在达到完全一致性后才更新?
我怀疑前者,但我找不到任何明确说明这一点的文件。
答案 0 :(得分:2)
Last-Modified
时间戳应与成功Date
请求的响应标头中返回的PUT
值相匹配。
据我所知,这没有明确记录,但可以从记录的内容中得出。
当你覆盖一个对象时,它不是可能被最终一致性模型延迟的覆盖本身 - 它是给定覆盖内容的可用性 S3节点(S3被复制到S3区域内的多个节点)。
Last-Modified
时间戳与其他元数据一样,是在创建对象时建立的,之后是不可变的。
Last-Modified
没有理由受复制延迟的影响(假设 复制延迟 - 最终的一致性有时无法与立即一致性区分开来。)
答案 1 :(得分:0)
这是S3所做的事情,绝对可怕。
基本上在Linux中,您拥有mtime,这是文件在文件系统上的最后修改时间。任何S3客户端都可以收集mtime并在S3上设置“ Last-Modified”时间,以便它可以在实际上次修改时保持时间。
相反,Amazon只是根据对象的创建来执行此操作,如果您只是想将数据用作放置它的原始应用程序之外的数据,那么这实际上是一个大问题。
因此,如果您从S3下载文件,则客户端可能会设置修改后的时间,如果该文件在创建后立即上传到s3,则至少会有接近正确的时间戳。但现实情况是,您可能会拍照,而且可能几天后仍无法从手机中通过应用程序,堆栈和S3获取照片!
这甚至都没有考虑将文件重新上传到s3。这可能会使问题更加复杂,因为您可能会在数年后重新上传它。几年后,当文件未真正被修改时,S3的行为就像Last-Modified。
它们确实需要允许您进行设置,但是它们在其他方面仍然模棱两可,而且文档过多,因此很难弄清这一点。