Cassandra更新声明

问题描述 投票:1回答:1

如何在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用于插入语句,但是对于我的情况可能存在一些好的模式?

cassandra cql
1个回答
3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.