AWS S3读取是否保证返回新创建的对象?

时间:2017-06-21 14:32:15

标签: amazon-web-services amazon-s3

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

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

换句话说,读取操作是否可能因为无法找到对象而失败?因为在写完后读取发生得太快了吗?

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

1 个答案:

答案 0 :(得分:3)

是保证返回对象(仅针对新对象),但需要注意一点:

根据AWS documentation

  

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

     

Amazon S3为覆盖PUTS和DELETES提供最终一致性   在所有地区。

编辑:@Michael的信用 - sqlbot,更多关于HEAD(或)GET警告:

  

如果在对象存在之前发送GET或HEAD,例如在上传之前检查是否存在对象,则即使在上载完成后上传也不会立即与读取请求保持一致,因为S3已经做出了它将为该对象做出的唯一立即一致的内部查询,在权威上发现没有这样的密钥。对象创建最终变得一致,因为创建必须"覆盖"以前没有找到任何内容的查找。

根据链接中提供的下表,"一致读取"永远不会陈旧。 enter image description here

以上提供的链接有关于如何"写后读写一致性" &安培; "最终的一致性"的工作原理。

我想在此答案中添加此警告说明以使事情更加清晰:

  

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

     

进程将新对象写入Amazon S3并立即列出密钥   在其桶内。直到更改完全传播,对象   可能不会出现在列表中。