PutIf 与 PutIfExists 和 PutIfNotExists 有何不同
How is PutIf different from PutIfExists and PutIfNotExists
我正在使用 ScalarDB
,它在 Cassandra
中添加了 ACID 支持。参考文档,PutIf
与 PutIfExists
和 PutIfNotExists
有何不同?
我想
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。
我正在使用 ScalarDB
,它在 Cassandra
中添加了 ACID 支持。参考文档,PutIf
与 PutIfExists
和 PutIfNotExists
有何不同?
我想
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。