【发布时间】:2021-08-08 05:26:28
【问题描述】:
我有大量文件正在读写到 S3。 我只是想知道我是否需要为文件“半写”的情况编写代码,例如S3 PUT / Write only "half" 工作。
或者对 S3 的写入是全有还是全无?
我知道存在读写最终一致性问题,(我认为)这在很大程度上是一个单独的问题。
【问题讨论】:
标签: amazon-web-services amazon-s3
我有大量文件正在读写到 S3。 我只是想知道我是否需要为文件“半写”的情况编写代码,例如S3 PUT / Write only "half" 工作。
或者对 S3 的写入是全有还是全无?
我知道存在读写最终一致性问题,(我认为)这在很大程度上是一个单独的问题。
【问题讨论】:
标签: amazon-web-services amazon-s3
Amazon S3 从不添加部分对象;如果您收到成功响应,Amazon S3 会将整个对象添加到存储桶中。
【讨论】:
对于所有地区除了美国标准(us-east-1),您将获得read-after-write-consistency。这意味着,如果您的 PUT 获得 HTTP 200 OK,您可以立即读取该对象。
如果您的请求在中间被丢弃,您将无法获得 HTTP 200,并且您的对象根本不会被写入。
更新:所有区域现在都支持写后读一致性(感谢@jeff-loughridge): https://aws.amazon.com/about-aws/whats-new/2015/08/amazon-s3-introduces-new-usability-enhancements/
【讨论】:
来自docs:
对单个键的更新是原子的。例如,如果您从一个线程 PUT 到现有密钥并同时从第二个线程对同一密钥执行 GET,您将获得旧数据或新数据,但绝不会获得部分或损坏的数据。
这个答案与现有的答案有些相似,但它强调这样一个事实,即不仅没有留下部分写入的对象的风险,而且读者将永远不会冒着看到(阅读)部分写入的对象的风险。
【讨论】: