Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 写入后成功读取的S3一致性_Amazon Web Services_Amazon S3_Eventual Consistency - Fatal编程技术网

Amazon web services 写入后成功读取的S3一致性

Amazon web services 写入后成功读取的S3一致性,amazon-web-services,amazon-s3,eventual-consistency,Amazon Web Services,Amazon S3,Eventual Consistency,在这里找不到明确的答案 根据AmazonS3文档,写后读的警告是,如果GET得到404,然后放置一个新对象,然后GET。 我的问题是,在我成功阅读之后, 后续读取是否也会成功 例如: GET key 404 PUT key 200 GET key 404 # because caveat GET key 200 从现在开始,任何后续的GET key都能保证成功吗?更新答案 来自 S3现在非常一致 在那冗长的介绍之后,我 我准备分享一些好消息 所有S3 GET、PUT和LIST操作都立即生效

在这里找不到明确的答案

根据AmazonS3文档,写后读的警告是,如果GET得到404,然后放置一个新对象,然后GET。 我的问题是,在我成功阅读之后,
后续读取是否也会成功

例如:

GET key 404
PUT key 200
GET key 404 # because caveat
GET key 200 
从现在开始,任何后续的
GET key
都能保证成功吗?

更新答案

来自

S3现在非常一致

在那冗长的介绍之后,我 我准备分享一些好消息

所有S3 GET、PUT和LIST操作都立即生效 作为更改对象标记、ACL或元数据的操作,现在 非常一致。你写的就是你要读的,而 列表的结果将准确反映列表中的内容 水桶这适用于所有现有和新的S3对象,适用于所有 区域,并且免费提供给您!没有影响 在性能方面,您可以每秒更新对象数百次 如果您愿意,并且没有全局依赖关系

最新答案

来自

S3现在非常一致

在那冗长的介绍之后,我 我准备分享一些好消息

所有S3 GET、PUT和LIST操作都立即生效 作为更改对象标记、ACL或元数据的操作,现在 非常一致。你写的就是你要读的,而 列表的结果将准确反映列表中的内容 水桶这适用于所有现有和新的S3对象,适用于所有 区域,并且免费提供给您!没有影响 在性能方面,您可以每秒更新对象数百次 如果您愿意,并且没有全局依赖关系


AWS在中描述的警告建议他们在数据库上使用缓存层来存储S3中对象的详细信息,如键和元数据

如果对对象执行
PUT
作为第一个操作,然后执行
GET
操作,则
GET
操作将出现缓存未命中,因此缓存层将从数据库中获取有关此对象的信息

如果在
PUT
之前执行
GET
,缓存层将查询数据库,接收该对象不存在的信息并缓存该信息,即使在
PUT
之后不久创建了所述对象。因此,
PUT
之后的
GET
将从缓存中接收对象不存在的信息

这可能就是这个警告存在的原因。不幸的是,这并不能回答您的问题,因为我们不知道缓存层是如何工作的。如果此层使用共享状态,则在收到一个带有
200
的响应后,您应该会收到所有请求的
200
响应。我的猜测是,缓存层不使用共享状态,因为这样更容易扩展。如果没有共享状态,这取决于您的运气、缓存中项目的生存时间,以及它们是否对更新的对象使用某种缓存失效,无论您是在第一次成功的
200
请求后收到
200
还是
404
请求


由于S3内部工作的细节未知,我不会依赖于后续调用来成功,但我的猜测是,成功的
200
之后接收
404
的概率相当低。最后,您必须根据您的用例来决定是否以及如何解释这种情况。

AWS在中描述的警告建议,他们使用数据库顶部的缓存层来存储S3中对象的详细信息,如密钥和元数据

如果对对象执行
PUT
作为第一个操作,然后执行
GET
操作,则
GET
操作将出现缓存未命中,因此缓存层将从数据库中获取有关此对象的信息

如果在
PUT
之前执行
GET
,缓存层将查询数据库,接收该对象不存在的信息并缓存该信息,即使在
PUT
之后不久创建了所述对象。因此,
PUT
之后的
GET
将从缓存中接收对象不存在的信息

这可能就是这个警告存在的原因。不幸的是,这并不能回答您的问题,因为我们不知道缓存层是如何工作的。如果此层使用共享状态,则在收到一个带有
200
的响应后,您应该会收到所有请求的
200
响应。我的猜测是,缓存层不使用共享状态,因为这样更容易扩展。如果没有共享状态,这取决于您的运气、缓存中项目的生存时间,以及它们是否对更新的对象使用某种缓存失效,无论您是在第一次成功的
200
请求后收到
200
还是
404
请求


由于S3内部工作的细节未知,我不会依赖于后续调用来成功,但我的猜测是,成功的
200
之后接收
404
的概率相当低。最后,您必须根据您的用例来决定是否以及如何解释这种情况。

是的,当然,一旦完全传播,但这主要是“传播”的定义。问题是你不能确定什么时候是,除了一个新对象的PUT(只要你以前没有头或得到相同的键)。我不知道是否有任何保证,在这种情况下,额外的GET将返回200。而且。。。AWS刚刚收到了陈的来信