Amazon web services AWS S3 read是否保证返回新创建的对象?

Amazon web services AWS S3 read是否保证返回新创建的对象?,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我一直在阅读有关AWS S3的读写一致性的文档,但我仍然不确定这一点 如果我将一个对象写入S3,并且在从写入操作获得成功响应后,我立即尝试读取它,那么读取操作是否保证返回该对象 换句话说,读操作是否可能因为找不到对象而失败?因为读的时候写的太快了 这里我只讨论新的PUT,而不是对现有对象的更新。是的,保证返回对象(仅针对新对象),但有一个警告: 根据: AmazonS3为新的PUT提供了读写一致性 S3存储桶中的对象在所有区域中都有一个警告。警告 如果您对密钥名称发出HEAD或GET请求(以查找

我一直在阅读有关AWS S3的读写一致性的文档,但我仍然不确定这一点

如果我将一个对象写入S3,并且在从写入操作获得成功响应后,我立即尝试读取它,那么读取操作是否保证返回该对象

换句话说,读操作是否可能因为找不到对象而失败?因为读的时候写的太快了


这里我只讨论新的PUT,而不是对现有对象的更新。

是的,保证返回对象(仅针对新对象),但有一个警告:

根据:

AmazonS3为新的PUT提供了读写一致性 S3存储桶中的对象在所有区域中都有一个警告。警告 如果您对密钥名称发出HEAD或GET请求(以查找是否 在创建对象之前,AmazonS3提供 写后读的最终一致性

AmazonS3提供了覆盖放置和删除的最终一致性 在所有地区

编辑:归功于@Michael-sqlbot,更多信息(或)获取警告:

如果在对象存在之前发送GET或HEAD,例如在上载之前检查是否存在对象,那么即使在上载完成后,对于读取请求,上载也不会立即一致,因为S3已经对该对象进行了唯一的立即一致的内部查询,发现,权威地说,没有这样的钥匙。对象创建最终会变得一致,因为创建必须“覆盖”之前未找到任何内容的查找

根据链接中提供的下表,“一致读取”永远不会过时。

上面提供的链接有一个关于“写后读一致性”和“最终一致性”如何工作的好例子

我想在回答这个问题时加上这个警告,让事情变得更清楚:

Amazon S3通过在Amazon数据中心内的多台服务器上复制数据来实现高可用性。如果PUT请求成功,您的数据将安全存储。但是,有关更改的信息必须在Amazon S3中复制,这可能需要一些时间,因此您可能会观察到以下行为:

一个进程将一个新对象写入AmazonS3并立即列出键 在它的桶里。在完全传播更改之前,对象 可能不会出现在列表中


那太好了,但我真的不明白这个警告。它说如果你在创建对象之前做了一个头部或者得到了
。。。但如果你这么做了,那么它不是一个先读后写的操作,那么为什么它是相关的呢?这就像是先读后写,这是没有意义的。但是GET就是阅读,不是吗?他们在第一次写信后应该是安全的。但是警告与此相矛盾?你误解了警告。如果在对象存在之前发送
GET
HEAD
,例如在上载之前检查是否存在对象,则即使在上载完成后,读取请求的上载也不会立即一致,因为S3已经为该对象进行了唯一一次立即一致的内部查询,权威性地发现没有这样的键。对象创建最终会变得一致,因为创建必须“覆盖”之前没有找到任何内容的查找。@Michael sqlbot谢谢!我删除了我的评论。你的观点非常正确,谢谢你的评论。从你的评论中学到很多。但有一件事我不确定,有人在不检查GET call结果的情况下启动上传的实际原因是什么?任何想法。@AbhinavVishak如果在对象存在之前发送
GET
HEAD
,例如在上传之前检查是否存在对象,然后,上传后立即发出的下一个
GET
HEAD
请求不再保证返回新对象:它可能会在短时间内返回
NoSuchKey
。如果在首次创建对象之前检查对象,则对象可能需要很短的时间才能显示。如果在上传对象之前没有检查对象是否存在,然后再上传,那么您会发现下一个请求肯定会返回新对象。