Amazon dynamodb 单客户端写操作在DynamoDB或Riak中是强排序的吗?
我有一个客户机,它按顺序执行以下两个操作:Amazon dynamodb 单客户端写操作在DynamoDB或Riak中是强排序的吗?,amazon-dynamodb,riak,eventual-consistency,Amazon Dynamodb,Riak,Eventual Consistency,我有一个客户机,它按顺序执行以下两个操作: 创建键为“ABC123”的新项 更新项目“newestKey”以包含值“ABC123” 同时,第二个客户端正在运行以下程序: 阅读项目“newestKey”以获取最新项目的密钥K 阅读项目K 第二个客户端是否可能获取“ABC123”作为“newestKey”,但在尝试加载项“ABC123”时收到未找到的错误,因为该项尚未通过数据库传播 换句话说,是否可以保证,如果一个客户端对数据库进行两次写入,那么任何客户端都不会看到第二次写入,除非它也看到第一次写入
换句话说,是否可以保证,如果一个客户端对数据库进行两次写入,那么任何客户端都不会看到第二次写入,除非它也看到第一次写入?DynamoDB,尽管它的名称,并不是基于激发Riak的Dynamo白皮书,所以我无法回答这部分问题 对于Riak,由于其优先考虑可用性而不是一致性,因此保证相对较少。由于发生了网络分区,因此客户端可能始终能够读取包含密钥“ABC123”的对象(我们称之为“INDEX123”),但可能无法访问具有“ABC123”密钥/值对的服务器 撇开网络严重受损或服务器出现故障的情况不谈,如果以下情况属实,我想不出客户端可以从“INDEX123”中读取密钥“ABC123”,但找不到密钥/值对“ABC123”的情况:
- 由“ABC123”表示的键/值对是新的(而不是对具有相同键的旧对象的更新)
- 所有操作(如W、R和DW)上的请求参数的默认值为2(假设N=3)
- 您描述的两个操作都是成功的
此修复操作称为“读取修复”。Riak还有一个主动的反熵机制,可以主动识别丢失/不一致的数据项并修复它们。不清楚你在问什么;键和值之间没有任何关系Brian,对于我的回答,我假设步骤1是创建一个新的键/值对,步骤2是更新一个引用它的索引对象。@BrianRoach它们都是写入数据库的。我想知道写入是否可以重新排序。我重写了我的问题;现在有意义了吗?所以,如果我不希望我的应用程序在临时分区期间崩溃,那么我不应该在我的应用程序逻辑中假设“ABC123”仍然存在。好的,谢谢您的帮助。@BrianGordon Correct,出于健壮性的原因,最好设计您的应用程序来处理找不到数据的可能性(与任何其他数据库都不一样)。