【问题标题】:Cassandra Update or Insert when KEY already exists as Batch当 KEY 已作为 Batch 存在时,Cassandra 更新或插入
【发布时间】:2014-05-12 16:02:39
【问题描述】:

我想象 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 行为

对于我想要执行的任务,这是一个正确的假设吗?

【问题讨论】:

    标签: merge cassandra batch-processing cql


    【解决方案1】:

    CQL 中的INSERTUPDATE 在幕后是同一个调用,因为在存储层上,无论如何你只有真正的更新。在 CQL 中,INSERTUPDATE 被暴露为语法糖,使 CQL 感觉更像 SQL。有一些细微差别,例如 UPDATE 语句采用 WHERE 子句并用于递增计数器表,但当 CQL 转换为存储层时,它们不会真正影响底层 PUT 语义。

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

    因此,鉴于此,我不认为这反映了 SQL MERGE 行为。它的共同点是两种变体都需要服务器获取行锁才能以原子方式执行操作。

    【讨论】:

    • 是的.. 做了更多的阅读,这很有意义;谢谢你的详细回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2012-10-05
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多