use*_*264 3 merge cql batch-processing cassandra
我想用Cassandra 2.0 +使用CQL这看起来就像
BATCH BEGIN;
UPDATE keyspace.Table SET column = "value" IF EXISTS
INSERT keyspace.Table (...) VALUES (...) IF NOT EXISTS
BATCH END;
Run Code Online (Sandbox Code Playgroud)
基本上要插入/更新每个项目的两个语句; 这基本上应该模仿T-SQL的MERGE行为
这是我想要执行的任务的正确假设吗?
INSERT并且UPDATE在CQL中是相同的调用,因为在存储层上,您实际上只有更新.在CQL,INSERT并UPDATE公开为语法糖使CQL感觉更像SQL.存在轻微的细微差别,例如UPDATE带有WHERE子句的语句以及用于递增计数器表的语句,但是当CQL转换为存储层时,它们并不真正影响基础PUT语义.
IF NOT EXISTS与CQL 一起使用INSERT或IF与UPDATECQL 一起使用时,Cassandra会在后端执行比较和交换操作.这意味着只有满足前提条件才会执行操作.这需要达成共识,因此在分布式设置中(例如,超过1个Cassandra节点),这可能会导致性能损失.
所以考虑到这一点,我不认为这反映了SQL MERGE行为.它确实具有的共同点是两种变体都要求服务器获取行锁以便以原子方式执行操作.