DynamoDB:条件写入与 CAP 定理

2024-02-07

使用 DynamoDB,两个独立的客户端尝试同时写入同一个项目,使用条件写入,并尝试更改条件引用的值。显然,这些写入之一注定会因条件检查而失败;没关系。

假设在写入操作期间发生了一些不好的事情,并且某些 DynamoDB 节点出现故障或彼此失去连接。我的写操作会发生什么?

它们会同时阻塞还是失败(牺牲 CAP 定理中的“A”)?他们会不会看起来都成功了,但后来才发现其中一个实际上被忽略了(牺牲了“C”)?或者,由于 DynamoDB 系统中发生的一些魔法(一致的哈希?),它们会以某种方式正常工作吗?

这似乎是一个非常困难的问题,但我找不到任何讨论条件写入可用性问题的可能性的内容(与一致性读取不同,一致性读取的可用性降低的可能性是明确的)。


这方面缺乏明确的信息,但我们可以做出一些相当有力的推论。许多人认为 DynamoDB 实现了其前身“Dynamo”的所有想法,但事实似乎并非如此,重要的是要在头脑中将两者分开。亚马逊在发电机纸 http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html。在思考这些问题时,如果您熟悉基于 Dynamo 思想的分布式数据库,例如 Riak 和 Cassandra,也会很有帮助。尤其,阿帕奇卡桑德拉 http://cassandra.apache.org/它提供了有关 CAP 的全方位权衡。

通过比较明显分布在 Cassandra 中可用选项的 DynamoDB,我想我们可以看到它在 CAP 空间中的位置。根据 Amazon 的说法,“DynamoDB 维护每个项目的多个副本以确保持久性。当您收到对写入请求的“操作成功”响应时,DynamoDB 会确保写入在多个服务器上持久。但是,传播更新需要时间到所有副本。” (数据读取和一致性注意事项 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/APISummary.html)。此外,DynamoDB 不要求应用程序像 Dynamo 那样解决冲突。假设他们希望提供尽可能多的可用性,因为他们说他们正在写入多个服务器,所以 DyanmoDB 中的写入相当于 CassandraQUORUM等级。另外,DynamoDB 似乎不支持暗示切换 http://wiki.apache.org/cassandra/HintedHandoff,因为这可能会导致需要解决冲突的情况。为了获得最大可用性,不一致的读取只需相当于 Cassandra 的读取ONE等级。但是,要在给定仲裁写入的情况下获得一致的读取,需要QUORUM级别读取(遵循 R + W > N 以保持一致性)。有关 Cassandra 级别的更多信息,请参阅关于 Cassandra 中的数据一致性 http://www.datastax.com/docs/1.1/dml/data_consistency.

综上所述,我的结论是:

  • 写入是“Quorum”,因此行复制到的大多数节点必须可用才能成功写入
  • 不一致读取为“One”,因此只需具有该行的单个节点可用,但返回的数据可能已过时
  • 一致性读取是“Quorum”,因此行复制到的大多数节点必须可用才能使读取成功

因此写入与一致读取具有相同的可用性。

为了具体解决有关两个同时条件写入的问题,一个或两个都会失败,具体取决于有多少节点已关闭。但是,永远不会出现不一致的情况。我认为写入的可用性实际上与它们是否有条件无关。

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

DynamoDB:条件写入与 CAP 定理 的相关文章

  • DynamoDB - 新放入的项目未反映在扫描中

    我在 DynamoDB 扫描方面遇到问题 我使用以下命令将新项目添加到表中putItem method AmazonClientManager ddb putItem request 但是 当我尝试使用扫描方法进行扫描时 该项目不会出现在结
  • Kinesis lambda DynamoDB

    我正在学习 AWS 服务的一个用例 在浏览完文档后 我想出了一个简单的流程 我想使用 Streams API 和 KPL 将数据提取到 Kinesis 流中 我使用示例 putRecord 方法将数据提取到流中 我正在将此 JSON 摄取到
  • 如何使用插入/修改/删除功能设计 dynamodb 以进行 Elastic 搜索

    如何使用 Python 将整个文档传递到 Elastic Search 中 这是放入弹性搜索的正确方法吗 在 dynamodb 中id是主键 如何插入到dynamodb下面是代码 import boto3 from boto3 dynamo
  • 如何连接 AWS DynamoDB 中的表?

    我知道整个设计应该基于自然聚合 文档 但是 我正在考虑实现一个单独的本地化表 语言 键 文本 然后使用其他表中的键 但是 我找不到任何这样做的例子 您是对的 DynamoDB 并非设计为关系数据库 并且不支持联接操作 您可以将 Dynamo
  • 如何使用 boto 循环 DynamoDB 表中的所有项目?

    我想查询 DynamoDB 表并检索所有项目并使用 boto 循环它们 如何构建返回表中所有内容的查询或扫描 初步支持Scan API http docs amazonwebservices com amazondynamodb lates
  • 解释 Merkle 树在最终一致性中的使用

    默克尔树 http en wikipedia org wiki Hash tree在几个分布式 复制的键 值存储中用作反熵机制 Dynamo http www allthingsdistributed com files amazon dy
  • AWS S3 中有乐观锁吗?

    我在 s3 中有一个 excel 文件 由于不同的程序读取和写入它 我需要保证每个程序都写入它们读取的版本 S3仅保证新创建对象的读后一致性 以及覆盖和删除对象的最终一致性 如果您的 Excel 文件足够小 小于 400kb 您可以将其存储
  • DynamoDB 触发器 Lambda 函数问题:函数调用失败

    我在 dynamoDB 表上启用了流 当项目被修改时 会触发 lambda 函数 我认为我在 lambda 触发器端 权限和 dynamodb 端都正确设置了所有内容 我还使用测试数据运行了 lambda 函数 并且成功了 但是 当修改表中
  • 使用 Swift 3 的 DynamoDB 中的保留关键字 ExpressionAttributeValues

    我能够在没有 status 接受表达式属性值的情况下获得响应 但是有了它 当我在projectionExpression 行中使用 status 时 我收到以下错误 状态是 DynamoDB 中的保留字 因此我必须添加主题标签有每https
  • 玩!框架+DynamoDB

    作为 Play 框架的新手 我想知道它是否比我想象的更容易 但是是否可以将 DynamoDB 与 Play 框架一起使用 由于 DynamoDB 是一个 NoSQL 数据库 我预计您需要使用特定的模块 而由于 Dynamo 最近才发布 因此
  • Number 类型的 DynamoDB 属性中可以存储多少位整数数据?

    DynamoDB 的Number https docs aws amazon com amazondynamodb latest developerguide HowItWorks NamingRulesDataTypes html How
  • Objective-C 中带有扫描过滤器的 dynamodb scanexpression

    AWSDynamoDBObjectMapper dynamoDBObjectMapper AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper AWSDynamoDBScanExpressi
  • 通过数据管道截断 DynamoDb 或重写数据

    可以通过数据管道转储 DynamoDb 也可以将数据导入 DynamoDb 导入进展顺利 但数据始终附加到 DynamoDb 中已存在的数据 目前 我找到了扫描 DynamoDb 并逐一或通过批量删除项目的工作示例 但无论如何 对于大量数据
  • AWS IAM——使用条件

    我是 AWS 中的 IAM 新手 而且 我希望将各种用户的查询限制为仅主键与 cognito id 匹配的表条目 为了实现这一目标 我制定了政策 Version 2012 10 17 Statement Sid AllowAccessToO
  • DynamoDB Stream 的计划读取

    我正在寻找一种按计划时间间隔从 DynamoDB 批量读取更新的方法 例如 每隔 10 分钟 我希望能够读取自上次读取以来 DynamoDB 表发生的所有更新 我了解 DynamoDB Streams 可以设置为触发 Lambda 函数 L
  • AmazonServiceException:用户无权执行:dynamodb:DescribeTable 状态代码:400;错误代码:AccessDeniedException

    我原本以为这个问题是由于区域不匹配造成的 但是在更改区域后 在尝试此处找到的 Amazon AWS 示例时 我仍然遇到以下错误 DynamoDB映射器 https github com awslabs aws sdk android sam
  • DynamoDB 如何查询重叠的时间范围

    考虑一个由主键和两个描述开始日期和结束日期的属性组成的 DynamoDB 表 如何在不扫描全表的情况下查询某个时间范围是否与表中的时间范围重叠 例子 dynamo表有两条记录 PK Start End A 2019 01 01 2019 1
  • 在全局二级索引上使用“withExclusiveStartKey”进行分页

    我有一个名为 product 的 DynamoDB 表 其全局二级索引位于 userId 上 主键位于 id 上 我正在尝试使用 userID GSI 上的 withExclusiveStartKey 来实现分页查询 但是 当我传递有效的
  • 适用于 Hadoop 的 DynamoDB 输入格式

    我必须使用 Hadoop mapreduce 处理保留在 Amazon Dynamodb 中的一些数据 我在互联网上搜索 Dynamo DB 的 Hadoop InputFormat 但找不到它 我对 Dynamo DB 不熟悉 所以我猜测
  • 更新项目时,NUMBER_VALUE 无法转换为字符串

    我在 DynamoDB 上遇到了这个奇怪的问题 我似乎无法更新项目 这是我的命令 TableName UserTable Key UID S h4XJj3YRxZiF7TDcGkxAhc UpdateExpression SET numRa

随机推荐

  • JNI for C 使用 Swig 和函数指针回调的问题

    我们在 java 中加载的库之一中有一个 C 函数 它接受一个函数指针 函数定义如下 typedef char int8 typedef unsigned short uint16 uint32 poll broadcasts void p
  • 在 C++ 0x 中打开枚举类

    C 0x 中新的 枚举类 声明是否允许打开新奇的枚举 我问的是标准的内容 而不是编译器的支持 来自 n3242 草案 6 4 2 switch 语句 stmt switch 2 条件应为整型 枚举类型或单个非显式的类类型 存在到整型或枚举类
  • 如何将一个 HashSet 的所有值插入到另一个 HashSet 中?

    我有两个HashSet
  • 使用 VBA 将文件夹导入 Excel (FileDialogFolderPicker)

    我使用下一个代码来从某个路径选择一个文件夹并导入其中的所有文件 Function GetFolder Dim fd As FileDialog Set fd Application FileDialog msoFileDialogFolde
  • 在 Java 中将两个整数相除得到 0 或 100?

    我试图除两个整数并乘以 100 但它始终只给出 0 或 100 有人可以帮助我吗 int x a b 100 如果 a 是 500 b 是 1000 它会给我 0 唯一一次它会给我 100 是如果 a gt b 我怎样才能解决这个问题 Th
  • 无法打开本地文件 - Chrome:不允许加载本地资源

    测试浏览器 Chrome 版本 52 0 2743 116 这是一个简单的 JavaScript 用于从本地打开图像文件 如 C 002 jpg function run var URL file C 002 jpg window open
  • JasperReports API 中的 FileResolver 被什么替代?

    我们的一个软件实用程序使用一个类来实现net sf jasperreports engine util FileResolver加载驻留在与报表相关的路径或要通过专有文件服务器协议加载的报表元素 例如图像 从最新版本 6 6 0 开始 我看
  • Android NDK 未定义引用

    我正在尝试实现代码 here https github com webjb myrobot 当尝试编译它时 我收到以下错误 Error 339 undefined reference to ANativeWindow fromSurface
  • 单向一对多关系的 NHibernate 配置

    我正在尝试建立如下关系 每个Master项目有一个或多个Detail items public class Detail public virtual Guid DetailId get set public virtual string
  • .net core如何将内容范围添加到标题

    我没有找到如何将 Content Range 添加到我的 odata 请求的标头中 我的 api 需要这样的格式来进行分页 Content Range posts 0 24 319 我能找到的最接近的是 HTTP 字节范围支持 从这里 ht
  • 如何使用 htaccess 仅在某些页面上启用 https?

    我有一个电子商务网站 我想仅在位于以下位置的网站的电子商务部分启用 https https mysite com buy https mysite com buy 由于我的页面上的所有链接都是相对的 当有人访问时http mysite co
  • python组合26个不同时间戳和相同列的数据帧

    美国的一个数据库接收来自世界各地的一日信息 csv格式 有15天的数据 来自26个地方 总共 15x26 390 个数据帧 此外 还有26个地方有共同的参考数据框 现在 我想将 390 1 个参考数据帧合并为一个 我在这里给出了我的问题的示
  • 如何返回列表切片的最大元素

    我想最大限度地简化这个功能 我该怎么办 def eleMax items start 0 end None if end is None end len items return max items start end 我想到了 def e
  • 是否可以从mysql中的别名中进行选择?

    我创建了一个名为的表别名tbl 我想从中选择 但我无法做到这一点 我知道我的代码不正确也不优化 但我只是测试 MySQLCASE select case when exists select username from tbl then U
  • 非聚集索引中的行定位器

    我正在读关于Non Clustered Index其中说 Nonclusteredindex 仅包含指向实际数据行的索引列和行定位器中的值 而不包含数据行本身 这意味着查询引擎必须采取额外的步骤才能找到实际数据 Query 我不清楚Row
  • iOS:同步相机帧和运动数据

    我正在尝试从相机捕获帧和相关的运动数据 为了同步 我使用时间戳 视频和动作被写入文件然后进行处理 在这个过程中 我可以计算每个视频的运动帧偏移 事实证明 相同时间戳的运动数据和视频数据彼此偏移不同的时间 从 0 2 秒到 0 3 秒不等 该
  • 事件驱动编程是如何实现的?

    我正在研究twisted 和node js 框架是如何工作的 我是 试图准确理解操作系统如何支持 I O 使用回调的操作 我知道这很好 因为我们需要更少的线程 因为我们不需要 需要阻塞线程等待 I O 操作 但有些东西 I O 完成后必须调
  • 计算数字数组的可能排列

    我有一个带有数字 0 1 2 3 的 NSArray 计算 4 的阶乘 数组的计数 我有 24 种可能的排列 0 1 2 3 我想知道是否有一种方法可以计算所有这些可能的排列并将它们放在一个单独的数组中 例如 给定上面的数字 0 1 2 3
  • 在 C# 中将对象转换为 int 会引发 InvalidCastException

    我有这个方法 private static Dossier PrepareDossier List
  • DynamoDB:条件写入与 CAP 定理

    使用 DynamoDB 两个独立的客户端尝试同时写入同一个项目 使用条件写入 并尝试更改条件引用的值 显然 这些写入之一注定会因条件检查而失败 没关系 假设在写入操作期间发生了一些不好的事情 并且某些 DynamoDB 节点出现故障或彼此失