Cassandra更新语句

时间:2018-08-29 14:23:01

标签: cassandra cql

我如何像这样一个在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批次,但不建议使用,请参见CASSANDRA-9283。我知道Cassandra用于Insert语句,但是对于我的情况也许存在一些好的模式?

1 个答案:

答案 0 :(得分:3)

计数器更新需要paxos循环和写入之前的读取。它是Cassandra中最慢的操作。相反,您可能想执行类似事件源计数器的操作。有一个((count_key, yymmdd) id),然后为每个记录插入一个新的timeuuid。将当前计数保留在内存中并在某个位置递增(甚至可以仅使用Redis)。然后在每天结束时在卡桑德拉写下当天的总数。如果发生故障或其他情况,您可以遍历事件计数并恢复内存中计数。