在此处找不到明确的答案。
根据Amazon S3文档,写入后读取的警告是,如果我得到404的GET,然后输入一个新的对象,然后是GET。
我的问题是,在我成功阅读后,
后续读取也会成功吗?
示例:
GET key 404
PUT key 200
GET key 404 # because caveat
GET key 200
从现在开始,是否可以保证以后的GET key
都会成功?
答案 0 :(得分:1)
AWS在S3 documentation中描述的警告建议他们在数据库顶部使用缓存层,用于在S3中存储对象的详细信息(例如密钥和元数据)。
如果您先对对象执行PUT
,然后再进行GET
,则GET
操作将出现缓存未命中,因此缓存层将获取有关此信息数据库中的对象。
如果您在GET
之前执行PUT
,则缓存层将查询数据库,即使在{{1之后,也将接收到该对象不存在的信息并缓存该信息。 }}之后不久创建了提到的对象。因此,PUT
之后的GET
将从缓存中接收到该对象不存在的信息。
这可能就是为什么存在此警告的原因。不幸的是,这不能回答您的问题,因为我们不知道该缓存层如何工作。如果该层使用共享状态,则在收到PUT
的一个响应后,您应该为所有请求收到一个200
响应。我的猜测是,他们不将共享状态用于缓存层,因为这样更易于扩展。如果没有共享状态,则取决于您的运气,缓存中项目的生存时间,以及它们是否对更新的对象采用某种类型的缓存失效,无论您是否收到200
或200
的请求即使在第一个成功的404
请求之后。
因为未知S3内部工作的细节,所以我不会依赖于成功调用的频繁调用,但是我的猜测是,成功200
之后收到404
的可能性相当大低。最后,您必须根据您的用例来决定考虑这种情况是否以及如何有意义。
答案 1 :(得分:0)
AWS文档没有提及最终写入时间的详细信息,但是是的,这就是为什么这就是为什么在PUT之后得到404的原因。但是根据我的经验,一旦传播了写操作,它们是可靠的,因此在您获取GET的前200个之后,您可以假设其余GET返回200。