scalardb - PutIf 与 PutIfExists 和 PutIfNotExists 有何不同
问题描述
我正在使用ScalarDB
它在Cassandra
. 参考文档,与和有何PutIf
不同?PutIfExists
PutIfNotExists
我想
PutIfExists
就像一个更新
PutIfNotExists
就像一个新的添加
什么是 PutIf?什么时候使用它?
解决方案
PutIf
可以添加条件来更新记录。您可以在没有任何其他条件的情况下PutIfExists
只想更新时使用。另一方面,PutIfNotExists
当您想要插入新记录而不会意外覆盖时,您必须使用。
例如,一个表有如下记录。pass
如果分数大于等于 60,我们想更新一条记录。(我们假设之前已经插入了记录,并且我们已经计算了阈值(均值、中位数等),那么我们决定 ID 可以是否通过门槛。)
|pID|cID|score| pass|
| 0| 0| 80|false|
| 1| 0| 45|false|
以下put
将更新要设置的第一true
条记录pass
。
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。
推荐阅读
- python - 如何在何时创建正确的输出?
- angular - Angular获取组件的父类引用
- c# - IIS内部的ASP.Net MVC同时抛出两个异常,但看不到异常
- arrays - Powershell循环通过事件日志
- mysql - SQL Union all throws SQL Syntax error 但两个 SELECTS 都可以
- windows - 创建最新文件版本的副本,并在 windows 批处理文件中将文件名中的版本增加一个
- firefox - svg 噪声未在 Firefox 中显示
- python - 关闭第二个 Tkinter 窗口不起作用
- c# - 使用自定义 Outlook Web App 插件设置电子邮件的类别
- php - 使用 select 和 with 时 Lumen/Laravel 获取属性