PutIf 与 PutIfExists 和 PutIfNotExists 有何不同

How is PutIf different from PutIfExists and PutIfNotExists

我正在使用 ScalarDB,它在 Cassandra 中添加了 ACID 支持。参考文档,PutIfPutIfExistsPutIfNotExists 有何不同?

我想 PutIfExists 好像更新了 PutIfNotExists 好像是新增的

什么是 PutIf?什么时候用?

PutIf可以添加条件来更新一条记录。当您只想 update 而没有任何其他条件时,您可以使用 PutIfExists。另一方面,当您想要 插入 新记录而不意外覆盖时,您必须使用 PutIfNotExists

例如table有如下记录。 如果分数大于或等于 60,我们想更新记录的 pass。 (我们假设事先已经插入了记录,并且计算了阈值(均值,中位数等),然后我们决定ID是否可以通过阈值。)

|pID|cID|score| pass|
|  0|  0|   80|false|
|  1|  0|   45|false|

以下 put 将更新第一个记录以在 pass 中设置 true

PartitionKey pk = new Key(new IntValue("pID", 0));
ClusteringKey ck = new Key(new IntValue("cID", 0));

PutIf condition = new PutIf(new ConditionalExpression("score", new IntValue(60), Operator.GTE));

Put put = new Put(pk, ck).withValue(new BooleanValue("pass", true)).withCondition(condition);

storage.put(put);

如果我们尝试更新具有相同条件的第二条记录,则不会更新,因为分数小于 60。