我可以在s3中使用版本控制来确保我正在使用最新版本的文档吗?

时间:2015-10-07 19:46:58

标签: amazon-s3

考虑我从s3获取文档的用例,进行一些更改然后PUT文档。由于该操作不是原子操作,我想确保当我输出文档时,我开始使用的版本仍然是最新的。

所以基本上当我执行PUT时,我想提供我开始使用的文档的versionid,如果该版本不再是当前版本,则会出现409冲突错误。

我真的希望s3支持这一点,但我还没有找到一个例子。

1 个答案:

答案 0 :(得分:2)

S3中没有这种条件PUT的机制。

覆盖PUT最终只是一致的,所以当PUT发生时当前版本的概念在S3中没有严格意义。

您可以在HEAD之前立即发送PUT请求,以确认您正在处理的版本仍然是当前版本,并且这样做,请避免一个明显的条件,对象被覆盖,在你取出它和你即将覆盖它之间变得一致,但是当对象仍然存在时,它是一个不可避免的时间窗口,无论多么短暂。或者最近可能已经改变了。

您还可以通过向替换副本添加元数据来减轻潜在危害,例如x-amz-meta-replaces-version-id和以前的版本ID,稍后或近乎实时地通过S3事件通知进行审核,并捕获中间版本已上传...但内置了无条件更新功能或对象锁定。