AWS s3同时移动同一对象

空值

最近,我考虑了一个我尚未完全想到的事情。基本上,事情是在问题中概括的。从广义上讲,我的问题如下:

(假设这些事情是由不同机器上的脚本或同一机器内的不同任务(同时)完成的)

假设我们有一个名为“ bucket-one”的存储桶,并且其中有一个键为“ foo / bar.ext”的对象,一个任务尝试将“ foo / bar.ext”移动到“ foo2 / bar.ext”,另一个尝试将对象移动到“ foo3 / bar.txt”,并说,例如,我们使用boto3 s3客户端/资源(虽然可能不影响输出)。

当您尝试同时在同一桶中将对象从同一文件夹同时移动到另一个文件夹会发生什么情况

我想到的输出是:

  • 通过将同一文件移动到不同的文件夹,两个请求都将成功,因此我们现在同时拥有“ foo2 / bar.ext”和“ foo3 / bar.ext”。
  • 其中只有一个移动到“ foo2 / bar.ext”或“ foo3 / bar.ext”
  • 两个请求均失败,对象未移动并保留为“ foo / bar.ext”。
  • 以上所有情况可能在没有事先精确知道输出的情况下发生。

第二个问题是同一件事,只是时间上的变化“不是在确切的时间,而是非常接近(几乎相同的时间)”

我知道可能性不大,但是我好奇这会导致什么。

谢谢

迈克尔-SQLbot

唯一可能的结果是您同时获得了两个目标对象。

S3不支持将对象移动到新键,它仅支持在新键(无论是在相同存储桶中还是在不同存储桶中)上复制对象,然后通过第二个请求删除原始对象。

删除已在复制或下载过程中的对象不会对该对象进行的操作产生任何影响。

此外,对最近删除的对象进行授权的删除操作永远不会失败(实际上,删除请求可能总是如此,但是这里的细节并不重要),因此任何一个进程都不会意识到另一个进程也刚刚删除了该对象。当他们尝试时,因为该操作将成功。

您甚至不需要在完全相同的时间发生事情,就可以得到两个对象。

如果事件按照“复制1”,“复制2”,“删除1”,“删除2”的顺序发生,那么无论复制1和复制2在多长时间内发生,只要删除1并未阻止复制2发生,这仍然是结果。正在启动...,但实际上,对对象的删除操作本身并不是即时的,因此即使在删除1完成后的短时间内启动复制2,复制2仍可能仍然有效。这是由S3提供的删除和覆盖操作的最终一致性行为引起的,该优化是将这种一致性交换为更高性能的PUT和GET(包括复制)的优化。达到完全一致性的时间量不是固定值,通常接近零。没有公开的接口可用于确定存储桶的索引副本是否完全一致。

请参阅Amazon Simple Storage Service开发人员指南中的Amazon S3数据一致性模型

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章