【问题标题】:Cassandra Update statementCassandra 更新声明
【发布时间】:2018-08-29 23:39:22
【问题描述】:

我怎样才能像这样在 Cassandra 上执行 UPDATE CQL 查询:

UPDATE table_name SET COUNT = COUNT + 1 WHERE ID = ?

尽可能快,例如,如果我发送 100-300 条记录,其中 0-10 将被更新。总记录可能是

SELECT count(*), min("count"), max("count") FROM table_name;
-- result 300000 | 1 | 120

我已经测试了 BatchStatement.Type.UNLOGGEDexecuteAsync。一般以2次batch取胜,但不推荐使用,见CASSANDRA-9283。我知道 Cassandra 用于 Insert 语句,但可能存在一些适合我的案例的好模式?

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    计数器更新需要 paxos 轮次和先读后写。它是 Cassandra 中最慢的操作。相反,您可能想要做类似事件源计数器之类的事情。有一个 ((count_key, yymmdd) id) 并为每条记录插入一个新的 timeuuid。将当前计数保存在内存中并在某处增加它(甚至可能只使用 redis)。然后在每天结束时在 Cassandra 中写下当天的总数。如果发生中断或其他情况,您可以遍历事件计数并恢复内存计数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2022-01-22
      • 2014-02-20
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多