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

kel*_*yfj 13 amazon-s3 amazon-web-services

我有大量的文件正在阅读和写入S3.我只是想知道我是否需要为文件"半写"的情况编写代码,例如S3 PUT/Write只有"half"工作.

或是写入S3全有或全无?

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

fae*_*anj 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- 可用性,增强/

  • 我希望这个答案包括指向文档的链接。 (2认同)
  • 所有区域现在都支持写后读一致性。请参阅 S3 常见问题解答。 (2认同)

Mys*_*tic 9

请参阅S3 PUT文档:

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

  • 对我来说,这就是问题的答案。 (4认同)

at5*_*321 7

来自文档

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

这个答案与现有的答案有些相似,但它强调这样一个事实:不仅不存在留下部分写入的对象的风险,而且读者永远不会面临看到(阅读)部分写入的对象的风险。 -书面对象。