我正在从与目标存储桶不同的源存储桶中发出S3 CopyObject(又名PUT副本)。我想知道在CopyObject向REST客户端返回OK之后删除源是否安全。 “安全”是指最终会 显示目标对象,并且该对象最初将包含发行副本时可用的所有数据所有。 / p>
副本中的损坏可能是不太可能的(鉴于大多数操作都是原子操作),但是这两个操作可能互相抵消(可能)。我希望文档能更加充实到eventual consistency。
(在我的情况下,在此期间,没有写入源密钥或目标密钥的操作,并且由同一客户端进行复制和删除)。
例如同步伪代码:
try:
# make sure this is a create. read-after-create consistency
my_tmpname = "new_tempfile" + uuid4()
s3_put(data, "s3://my-bucket1/" + my_tmpname)
...
# copy it to its final location
s3_copy("s3://my-bucket1/new_tempfile", "s3://my-bucket2/final_location")
finally:
# Cleanup temp file.
#
# Can this delete interfere with the copy in flight?
# e.g. Should one wait a few seconds/minutes?
# e.g. Should one ensure that the target exists before deleting source?
s3_delete("s3://my-bucket/new_tempfile")
答案 0 :(得分:2)
是的,使用该对象作为源对象成功完成复制操作后立即删除该对象是绝对安全的,因为复制操作不是异步的。
在操作成功或失败之前,复制请求不会返回。
为帮助更好地确保数据持久性,Amazon S3 PUT 和 PUT对象复制操作在返回
SUCCESS
之前将数据跨多个设施同步存储。https://docs.aws.amazon.com/AmazonS3/latest/dev/DataDurability.html
S3中的一致性模型仅与对象的可见性有关,与对象的存储持久性无关。
答案 1 :(得分:0)
Amazon S3具有PUT和示例中的复制案例的读写后一致性:
Amazon S3数据一致性模型
Amazon S3为新PUTS提供写后读取一致性 请注意,所有区域中S3存储桶中的所有对象均需注意。注意事项 是如果您向键名发出HEAD或GET请求(以查找是否 对象存在)在创建对象之前,Amazon S3提供 最终一致性,以便于写后读取。
检查文档中其他操作的一致性。
https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html