在 AWS S3 中创建对象的新版本是最终一致还是写后读一致?

2024-01-10

我从 Amazon 的文档中看到,将新对象写入 S3 是写后读一致的,但更新和删除操作最终是一致的。我猜想推动新版本打开版本控制的对象最终会像更新一样保持一致,但我找不到任何文档来确认。有人知道吗?

编辑:我的问题是关于指定或不指定显式版本的 GET 的行为。

我真的很喜欢先写后读的行为updates对于我的项目,我可能只能模拟执行插入,但如果推送对象的新版本提供了所需的行为,可能会更容易。


就像你已经知道的那样...

问:Amazon S3 采用什么数据一致性模型?

所有区域中的 Amazon S3 存储桶为新对象的 PUTS 提供写入后读取一致性,并为覆盖 PUTS 和 DELETES 提供最终一致性。

https://aws.amazon.com/s3/faqs/ https://aws.amazon.com/s3/faqs/

...就一致性模型的官方声明而言,这就是全部内容。

然而,我建议可以从这里以合理的确定性推断出其余部分,以及我们可以合理做出的假设,再加上对 S3 内部工作原理的一些额外的一般见解。

例如,我们知道 S3 实际上并未以分层结构存储对象,但是:

Amazon S3 维护每个 AWS 区域中的对象键名称的索引。对象键按字典顺序存储在索引中的多个分区中。

http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html

这意味着 S3 至少有两个离散的主要组件:保存数据的后备存储,以及指向后备存储中位置的键索引。我们还知道,两者都分布在多个可用区中,因此两者都会被复制。

后备存储与索引分离的事实并不是一个既定的结论,除非您记住存储类可以基于每个对象进行选择,这几乎必然意味着索引和数据是分开存储的。

从覆盖的事实来看PUT操作是最终一致的,我们可以得出结论,即使在非版本化存储桶中,覆盖实际上也不是覆盖后备存储,而是覆盖该对象键的索引条目,并最终释放该存储桶。后备存储中不再被索引引用的空间。

我在这些断言中看到的含义是索引被复制,并且覆盖后读取(或删除)可能会命中尚未反映最近覆盖的索引副本......但是当读取时在其本地索引中遇到“没有这样的键”的情况,系统会采用更资源密集的路径来询问“主”索引(无论这在 S3 架构中实际上意味着什么),以查看这样的对象是否确实存在,但本地索引副本根本还没有得知这一点。

自从第一次GET几乎可以肯定,新对象未复制到适当的本地索引副本的情况很少见,因此可以合理地预期,S3 的架构师允许更高成本的“发现”操作以改善用户体验,当系统中的节点认为这可能是它遇到的情况。

综上所述,我建议您最有可能遇到的行为是:

  • GET覆盖后版本化对象上没有 versionIdPUT将是最终一致的,因为服务读取请求的节点不会遇到“无这样的键”条件,因此不会遵循我上面推测的理论上成本更高的“发现”模型。

  • GET明确请求最新的 versionId 将在覆盖时立即保持一致PUT,因为读取节点很可能会启动高成本策略来获得上游确认其索引是否反映了所有最新数据,当然这里的条件是“No Such Version”,而不是“No Such Key”。

我知道猜测不是你所希望的,但缺乏记录的确认或经验(或者可能是一些really令人信服的轶事)相反的证据,我怀疑这是我们根据有关 S3 平台的公开信息得出的最接近可信的结论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AWS S3 中创建对象的新版本是最终一致还是写后读一致? 的相关文章

  • 在 Python 2.7 中出现“ImportError:无法导入名称 HTTPSConnection”错误

    我正在尝试在 AWS ElasticBeanstalk 中部署 django 当我按照所示步骤操作时here http docs aws amazon com elasticbeanstalk latest dg create deploy
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 为什么我会收到 ElasticBeanstalk::ExternalInitationError?

    我的应用程序基于 RubyOnRails 构建 并使用乘客部署为弹性 beanstalk 应用程序 我尝试向 nginx 服务器添加标头并重新启动它 这是我的配置文件 是 aws elastic beanstalk 中 ebextensio
  • 使用 Amazon SQS 的 .net 应用程序示例

    我正在寻找一个示例 Net 应用程序 该应用程序会持续检查 Amazon SQS 是否有新消息 并在发现新消息时执行一项操作并将其从队列中删除 我的目标是让一个在 EC2 上运行的应用程序监视我的 SQS 队列中的新消息 当找到一条消息时
  • cloudfront 响应状态为 413(请求实体太大)

    我们需要发送大量数据作为 URL 的一部分 Angular 将读取该数据以呈现页面 网址超过 10000 个字符 但 cloudfront 返回以下错误 错误的请求 由 cloudfront CloudFront 生成请求 ID I2fOA
  • 如何使用 aws-cdk 在 EC2 和 RDS 之间创建 DependsOn 关系

    我目前正在使用aws cdk TypeScript 创建一个堆栈 其中包含EC2实例和一个RDS数据库实例 The RDS实例需要在之前设置EC2实例可以启动并且userdata将被执行 我遇到的问题是 我找不到一种方法来定义DepensO
  • Amazon s3 – 403 禁止使用正确的存储桶策略

    我正在尝试使用以下存储桶策略 使存储在 s3 存储桶中的所有图像可供公开读取 Id Policy1380877762691 Statement Sid Stmt1380877761162 Action s3 GetObject Effect
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • Nginx url 限制 502 网关

    我有一个问题 但我接受绕过此功能的其他建议 基本上 我在 get 请求中向我的服务器发送大约 3000 个字符的大行文本 然后服务器将其作为 url 中的参数发送到谷歌翻译 问题 当 url gt 1900 个字符时 Nginx 会抛出 5
  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • ECS相当于docker-compose的命令

    我有一个使用 docker compose 运行的应用程序 现在我正在将应用程序迁移到 ECS 上托管 我正在将 docker compose 设置转换为 boto3 ECS 等效项 不幸的是我没有找到相当于 docker compose
  • 检查SQS队列是否为空的有效方法

    我有一个SQS Queue多个主机从中读取消息 我想在处理队列中的所有消息后运行一些作业 业务逻辑 如何检查队列是否为空 是的 我可以检查ApproximateNumberOfMessages and ApproximateNumberOf
  • Rails 4.1 AWS Beanstalk 找不到秘密密钥库

    我正在尝试在 AWS Beanstalk 上上传我的 Rails 项目 我已经运行 eb init eb start 并将数据库设置配置为指向 RDS 在我使用 git aws push 推送并等待 AWS 服务器启动后 提供的链接显示 5
  • 表单输入框不显示

    我正在尝试使用 Django 显示一个简单的表单输入文本框 我正在亚马逊 AWS 上部署 该网站在不同的服务器 pythonanywhere 上运行良好 但在 AWS 上存在主要问题 具体来说 输入框没有被显示 我使用的模板如下 首页 ht
  • 使用 lambda 更新 amazon s3 对象元数据而不执行对象复制?

    是否可以使用 lambda 函数添 加或更新 s3 对象元数据而不复制对象 这篇 2 年前的帖子说我们确实需要复制一份 https stackoverflow com questions 32646646 how do i update m
  • AWS S3从本地主机批量上传php错误

    我在尝试着批次 散装从本地主机 xampp 上传到我的S3 bucket 它似乎适用于大约 6 个项目 然后我收到一条错误消息 cURL 错误说Failed sending network data from http curl haxx
  • 使用 Boto3 以字符串形式打开 S3 对象

    我知道使用 Boto 2 可以使用以下命令将 S3 对象作为字符串打开 get contents as string http boto readthedocs org en latest ref file html highlight c
  • 尝试访问 iframe 内容(不同子域);尝试设置 CORS

    我将文件托管在domain com 其中包含一个 iframe 其文档托管在s3 domain com 我正在尝试访问 iframe 的内容 但收到以下信息 不安全的 JavaScript 尝试通过 URL 访问框架http s3 doma
  • 将大型高清视频文件上传到 Amazon Web Services S3

    最终目标 将大型视频文件 内容制作者将是专业用户 因此他们的一点额外工作并不是一个巨大的负担 然而 对他们 和我 来说 保持尽可能简单是理想的 如果可以使用网络表单来启动那就最好了 内容制作者不会有数百个 因此可以投入一些额外的时间或精力为
  • AWS 存储桶和区域

    该应用程序结合使用载波carrierwave aws宝石 在迁移 Rails 版本 升至 4 2 Ruby 版本 2 2 3 并重新部署到同一临时服务器时遇到了障碍 AWS 存储桶最初是在免费套餐中创建的 即俄勒冈州 us west 2 但

随机推荐

  • “此应用程序正在从后台线程修改自动布局引擎”

    我遇到以下错误 此应用程序正在从后台线程修改自动布局引擎 这可能会导致引擎损坏和奇怪的崩溃 每当我尝试将图像视图加载到表视图中时 相关代码如下 override func tableView tableView UITableView ce
  • 在 Gnuplot 中自定义颜色范围

    我有一个运行良好的等值线图 它为不同的值生成等量的颜色 我想要的是在右侧生成标签 以便为每个块提供正确的颜色 当前结果 我想要的是每个块都有这个值 300 100 70 30 10 1 0 编辑 当我添加这段代码时 set cbtics 3
  • 在 C++ 中使用 new 分配大于 2GB 的单个对象(在 Windows 上)

    我使用的是 Windows x64 模式 在 Visual Studio 上使用 MSVC 编译 这new当我这样做时 运算符似乎没有按预期工作 char buf new char 1LLU lt lt 32 但是如果我传入一个变量而不是直
  • 如何在两个PHP文件之间传递变量?

    我在名为 one php 的文件中有以下代码 a href two php Click here for 1 a a href two php Click here for 2 a 现在 当我单击锚标记链接之一时 它会将我带到two php
  • 如何在颤振中在屏幕中央创建标签栏?

    我正在尝试使用 flutter 在屏幕中心创建一个选项卡栏 同时尝试在列中给出 TabBarView 但我陷入了这个错误 请解决这个问题 I flutter 3983 EXCEPTION CAUGHT BY RENDERING LIBRAR
  • 是否可以像 Matlab 一样在 IPython 中显示对象实例变量?

    我正在尝试从 Matlab 转向 Python 而魔法 IPython 很好 Matlab 的一个非常好的功能是您可以在命令行上 通过省略 看到相关对象的实例变量 在 Matlab 中称为属性 这在 python 中可能吗 我猜是通过 IP
  • firebase实时数据库分片规则

    2019 11 03 更新 添加了错误的实时最小再现 https shardautherror firebaseapp com 在 Chrome 中加载链接后 按 ctrl shift i 并选择控制台以查看输出 我已尽力确保这完全符合我原
  • 警告:列表中的每个子项都应该有一个唯一的“key”道具,即使它有唯一的 key React

    所以我想渲染数组 但它一直说 警告 列表中的每个子项都应该有一个唯一的 key 道具 即使它有唯一的键 我的数组包含三个元素 它甚至不能正确渲染第三个数组 由于某种原因 该按钮甚至无法在第三里工作 import React useEffec
  • 超级能力:仅当字符串以行开头时才将其与分词器匹配

    在超级能力中进行标记时 仅当字符串是一行中的第一件事时 如何匹配字符串 注意 这是一个与this one https stackoverflow com questions 52706549 superpower match a strin
  • 如何使用php访问Oracle APEX的数据库?

    我刚刚发现PHP and APEX互相对比 我想做的是操纵Oracle数据库使用PHP代替APEX 我想要这样做的主要原因是免费使用 Oracle 数据库 作为初学者 您可能会发现这很有用 http php net manual en fu
  • 相对布局忽略 setMargin()

    我正在尝试嵌套一个RelativeLayout里面的一个LinearLayout 并给出RelativeLayout将其边缘与边缘的边缘隔开的边距LinearLayout 到目前为止我有这个 LayoutInflater from cont
  • VueJS - Vue 未定义

    我挑战自己编写一个应用程序 从 API 获取数据并将其显示在各种组件中 我对 VueJS 还很陌生 我使用 VueResource 来访问 API 使用 VueX 来进行状态管理 我已经设置了我的商店 我添加了操作 突变和吸气剂等 一旦我添
  • Visual Studio 2015 解决方案向后兼容 Visual Studio 2013

    看来我可以在 VS 2015 中打开 VS 2013 解决方案文件 我有几个关于向后兼容性的问题 能否在 VS 2015 中安全地维护 VS 2013 解决方案 而不会失去在 VS 2013 中处理该解决方案的能力 VS 2015 解决方案
  • iOS:注册令牌无效。检查令牌格式

    我是 Firebase 和 iOS 的新手 我正在尝试使用 FCM 发送推送通知 我在 FCM 上注册了一个 iOS 应用程序 两个都 p12添加了证书 根据FCM开发的代码 通过发送通知时Firebase 控制台 https fireba
  • Kindle SDK 语言/平台

    有谁知道新的语言 平台是什么会支持吗 Kindle 开发工具包 KDK 基于 Java 来自FAQ https kindlepublishing amazon com gp vendor kindlepubs kdk get content
  • 如何克隆对象

    当我执行以下操作时 对人 b 所做的任何操作都会修改人 a 我认为这样做会从人 a 克隆人 b 我也不知道链接后更改人员 a 是否会更改人员 b 由于我现在的代码 我只能在 1 个方向看到这一点 Person a new Person he
  • Excel (Office 365) 在执行 UDF 时自动重新启动

    在此先感谢您的帮助 我不确定 UDF 中的问题出在哪里 但执行程序后 Excel 自动重新启动 并且还显示 MsxBox 两次和参考值 Public queryString As String Public Function SetIt R
  • RSA 解密 C# (.NET 3.5) 中的数据,该数据在 php 5.3.2 中使用 openssl 加密

    也许有人可以澄清我 我已经在这上面冲浪有一段时间了 步骤 1 创建根证书 Key generation on unix 1 openssl req x509 nodes days 3650 newkey rsa 1024 keyout pr
  • 在没有 XML 的 Spring 4 中使用 EhCache

    有没有一种方法可以在 Spring 4 中或使用 Spring Boot 中不使用 xml 来初始化 EhCache 我注意到 Spring Boot 1 0 0 RC3 没有任何 ehcache 依赖项 但是Spring 4 0GA 发布
  • 在 AWS S3 中创建对象的新版本是最终一致还是写后读一致?

    我从 Amazon 的文档中看到 将新对象写入 S3 是写后读一致的 但更新和删除操作最终是一致的 我猜想推动新版本打开版本控制的对象最终会像更新一样保持一致 但我找不到任何文档来确认 有人知道吗 编辑 我的问题是关于指定或不指定显式版本的