Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 dynamodb dynamoDBs写一致性能保证事务性写吗?_Amazon Dynamodb - Fatal编程技术网

Amazon dynamodb dynamoDBs写一致性能保证事务性写吗?

Amazon dynamodb dynamoDBs写一致性能保证事务性写吗?,amazon-dynamodb,Amazon Dynamodb,我的web服务中有一个事务系统。基本上,您可以在账户之间来回发送(伪造)货币。 这需要一个高度一致的写模型。这就是我担心的情况。A有0$,B有0$,C有100$。C发送100美元Cs余额,当前正在更新。在更新传播到所有dynamoDB节点之前,C向B发送100美元,因为在另一个实例中,他的余额仍然是100美元。现在C的余额是-100美元,a和B都是100美元。这将是一种无效状态。 由于这种情况需要一致的读写(以检查和更新余额),dynamoDB写操作适合这种情况吗?我不是dynamoDB专家,但

我的web服务中有一个事务系统。基本上,您可以在账户之间来回发送(伪造)货币。
这需要一个高度一致的写模型。这就是我担心的情况。A有0$,B有0$,C有100$。C发送100美元Cs余额,当前正在更新。在更新传播到所有dynamoDB节点之前,C向B发送100美元,因为在另一个实例中,他的余额仍然是100美元。现在C的余额是-100美元,a和B都是100美元。这将是一种无效状态。

由于这种情况需要一致的读写(以检查和更新余额),dynamoDB写操作适合这种情况吗?

我不是dynamoDB专家,但我几乎可以肯定您可以做到这一点

要执行此操作,请确保使用
UpdateItem
上的
ConditionExpression
功能。这样你就可以避免你所说的

DynamoDB中的读取是“最终一致的”,所以,正如您所说的,读者可能会认为在您更改了C的余额之后,“C有100美元”。但是,我很确定使用条件表达式可以完全保证您永远不会进入这种糟糕的状态。您可以将更新请求构造为一个完全原子化的操作,除非满足以下条件:“仅当C的余额>=$100时,才将C的余额减少$100”。DynamoDB可以为您以原子方式执行该更新,从而防止出现问题


还有,看看这个。如果我没记错的话,演讲者讲了一些与此相邻的话题。

文档中提到的原子性吗?它们还有以下操作,您可以查看:
TransactionWriteItems
TransactionGetItems
读取默认情况下最终是一致的,但是可以请求对DynamoDB的调用为强一致读取。