RTF*_*RTF 3 amazon-s3 amazon-web-services
我一直在阅读有关与AWS S3的写后读一致性的文档,但是我仍然不确定。
如果我向S3写入对象,并且在从写入操作中获得成功响应后,我立即尝试读取它,读取操作是否可以保证返回对象?
换句话说,读取操作是否可能因为找不到对象而失败?因为读取发生在写入之后太早了?
我在这里只谈论新的PUT,而不是对现有对象的更新。
是的,保证返回带有一个警告的对象(仅对于新对象):
根据AWS文档:
Amazon S3为所有区域中的S3存储桶中的新对象提供PUTS写入后读取一致性,但请注意。需要注意的是,如果在创建对象之前对键名称发出HEAD或GET请求(以查找对象是否存在),Amazon S3最终将为写后读取提供一致性。
Amazon S3为覆盖所有区域中的PUTS和DELETES提供了最终的一致性。
编辑:致谢@Michael-sqlbot,更多关于HEAD(或)的警告:
如果在对象存在之前发送GET或HEAD,例如在上传之前检查是否存在对象,则即使上传完成后,上传也不立即与读取请求保持一致,因为S3已经成为唯一它将针对该对象进行一致的内部查询,从而权威地发现没有此类关键字。对象创建最终变得一致,因为创建必须“覆盖”没有发现任何内容的先前查找。
上面提供的链接提供了一个很好的示例,说明“写后读取一致性”和“最终一致性”如何工作。
我想在此答案中添加此警告说明,以使事情更清楚:
Amazon S3通过跨Amazon数据中心内的多台服务器复制数据来实现高可用性。如果PUT请求成功,则将安全地存储您的数据。但是,有关更改的信息必须跨Amazon S3复制,这可能需要一些时间,因此您可能会观察到以下行为:
进程将新对象写入Amazon S3,并立即在其存储桶中列出密钥。在完全传播更改之前,该对象可能不会出现在列表中。
归档时间: |
|
查看次数: |
699 次 |
最近记录: |