当KEY作为Batch存在时,Cassandra更新或插入

时间:2014-05-11 17:15:34

标签: merge cassandra batch-processing cql

我想用Cassandra 2.0 +使用CQL,这看起来像

BATCH BEGIN;
UPDATE keyspace.Table SET column = "value" IF EXISTS
INSERT keyspace.Table (...) VALUES (...) IF NOT EXISTS
BATCH END;

基本上要插入/更新每个项目的两个语句;这基本上应该模仿T-SQL的MERGE行为

这是我想要执行的任务的正确假设吗?

1 个答案:

答案 0 :(得分:9)

CQL中的

INSERTUPDATE是相同的调用,因为在存储层,您实际上只有更新。在CQL中,INSERTUPDATE作为语法糖暴露,使CQL更像SQL。存在轻微的细微差别,例如UPDATE语句采用WHERE子句并且还用于递增计数器表,但是当CQL转换为CQL时,它们不会真正影响基础PUT语义。存储层。

与C IF NOT EXISTS中使用的INSERTIF一起使用的

UPDATE告诉Cassandra在后端执行比较和交换操作。这意味着只有满足前提条件才会执行操作。这需要达成共识,因此在分布式设置中(例如,超过1个Cassandra节点),这可能会导致性能损失。

因此,我不认为这反映了SQL MERGE的行为。它确实具有的共同点是两种变体都要求服务器获取行锁以便以原子方式执行操作。