我使用ConditionExpression
调用PutItem,如下所示:
attribute_exists(id) AND object_version = :x
换句话说,如果满足以下条件,我只想更新项目:
现在,如果检查失败,我不知道哪个条件是错误的。有没有办法获得哪些条件是错误的信息?可能不是,但谁知道...
答案 0 :(得分:2)
DynamoDB中的条件表达式允许对单个对象强烈一致的DynamoDB对象进行原子写入操作,这要归功于paxos,即使在分布式系统中也是如此。
一种标准方法是首先简单地读取对象,然后在客户端应用程序代码中执行上述检查。如果其中一个条件不匹配,则在没有写入操作失败的情况下直接知道哪个条件无效。使DynamoDB执行此检查的原因是因为另一个应用程序或线程可能在检查和写入之间修改了此对象。如果写入失败,那么您将再次读取该对象并再次执行检查。
另一种方法是在写入之前跳过读取,并在写入失败后读取对象,以检查代码以确定实际失败的条件。
需要针对该表的一个或两个附加读取,因为您想知道哪个特定条件失败。 DynamoDB不提供此功能,因此您必须自己进行检查。