gpt4 book ai didi

amazon-s3 - S3 写后读的最终一致性

转载 作者:行者123 更新时间:2023-12-04 15:24:01 25 4
gpt4 key购买 nike

我阅读了很多关于 s3 最终一致性的不同场景和问题,以及如何处理它以避免出现 404 错误。但在这里我有一点奇怪的用例/要求!我正在做的是将一堆文件写入 s3 存储桶中的临时/临时文件夹(使用 spark 作业并确保作业不会失败),然后如果上一步成功则删除主/目标文件夹,最后将文件从临时文件复制到同一存储桶中的主文件夹。这是我的部分代码:

# first writing objects into the tempPrefix here using pyspark
...
# delete the main folder (old data) here
...

# copy files from the temp to the main folder
for obj in bucket.objects.filter(Prefix=tempPrefix):

# this function make sure the specific key is available for read
# by calling HeadObject with retries - throwing exception otherwise
waitForObjectToBeAvaiableForRead(bucketName, obj.key)

copy_source = {
"Bucket": bucketName,
"Key": obj.key
}
new_key = obj.key.replace(tempPrefix, mainPrefix, 1)
new_obj = bucket.Object(new_key)
new_obj.copy(copy_source)

这似乎可以避免写入后立即读取的任何 404 (NoSuchKey) 错误。我的问题是 bucket.objects.filter 会一直给我新写的对象/键吗?最终一致性也会影响它吗?我问这个的原因是 HeadObject 调用(在 waitForObjectToBeAvaiableForRead 函数中)有时会为 bucket.objects.filter 返回的键返回 404 错误!!!我的意思是 bucket.objects 返回一个无法读取的键!!!

最佳答案

当您在 S3 中删除一个对象时,AWS 会为该对象写入一个“删除标记”(这假定存储桶是版本化的)。该对象似乎已被删除,但这是 AWS 造成的一种错觉。

因此,如果您在以前存在但现在已删除的对象上写入对象,那么您实际上是在更新一个导致“最终一致性”而不是“强一致性”的对象。

来自 AWS docs 的一些有用评论:

A delete marker is a placeholder (marker) for a versioned object thatwas named in a simple DELETE request. Because the object was in aversioning-enabled bucket, the object was not deleted. The deletemarker, however, makes Amazon S3 behave as if it had been deleted.

If you try to get an object and its current version is a deletemarker, Amazon S3 responds with:

A 404 (Object not found) error

A response header, x-amz-delete-marker: true

具体答案

My question is will the bucket.objects.filter give me the newly written objects/keys always?

是的,如果存储桶中的对象少于 1,000 个,将包括新写入的对象/键。 API 最多返回 1,000 个对象。

Can eventual consistency affect that as well?

最终一致性影响对象最新版本的可用性,而不是对象在过滤结果中的存在。 404 错误是试图读取最近删除的新写入对象的结果(尚未实现完全一致性)。

关于amazon-s3 - S3 写后读的最终一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62699599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com