写入Amazon S3原子(全有或全无)?

时间:2014-05-20 15:55:24

标签: amazon-web-services amazon-s3

我正在阅读和写入S3的大量文件。 我只是想知道我是否需要编码文件是"半写"例如S3 PUT /只写"一半"工作

或是写入S3全有或全无?

我知道有一个读写的最终一致性问题(我认为)在很大程度上是一个单独的问题。

3 个答案:

答案 0 :(得分:15)

对于除美国标准(us-east-1)之外的所有区域,您将获得写后一致性。这意味着如果您为PUT获得HTTP 200 OK,则可以立即读取该对象。

如果您的请求被中间删除,您将无法获得HTTP 200,并且根本不会写入您的对象。

更新:所有地区现在都支持读写后一致性(感谢@ jeff-loughridge): https://aws.amazon.com/about-aws/whats-new/2015/08/amazon-s3-introduces-new-usability-enhancements/

答案 1 :(得分:8)

请参阅S3 PUT documentation

  

Amazon S3从不添加部分对象;如果您收到成功响应,Amazon S3会将整个对象添加到存储桶中。

答案 2 :(得分:0)

来自docs

<块引用>

对单个键的更新是原子的。例如,如果您从一个线程 PUT 到现有的键并同时从第二个线程对同一个键执行 GET,您将获得旧数据或新数据,但不会获得部分或损坏的数据。

这个答案与现有答案有些相似,但它强调这样一个事实,即不仅没有留下部分写入对象的风险,而且读者将永远冒着看到(阅读)部分书写对象的风险。