假设我有下表:
id text PRIMARY_KEY,
question_asked (int?),
question_answered (int?)
该表每次都由同一用户更新 . 他无法同时更新此表 .
我想使用以下查询:
UPDATE %s.%s SET question_asked = question_asked + 1 WHERE %s = :execution_id;
如果我在更新此特定情况时使用LOCAL_QUORUM . 我可以对一致性有任何疑问吗?如果是这样,我会很高兴理解为什么
我熟悉计数器,这是我到目前为止使用它的方式 . 使用计数器的问题是我无法定义TTL .
2 回答
对于这种操作,请查看计数器列:
https://cassandra.apache.org/doc/latest/cql/types.html#counters
https://docs.datastax.com/en/cql/3.3/cql/cql_using/useCountersConcept.html
请记住,Cassandra威胁计数器与正常数据不同,计数器列需要位于单独的列中.-
不,在你使用特殊的type called counter之前,这在Cassandra是不可能的 . 但它有's own problems - because it'不是幂等的,那么在服务器端出现错误时不会重试,这可能会导致错误的结果 .
作为解决方法,您可能会尝试使用lightweight transactions,但它们非常重量级,因此在使用它们时不要指望高吞吐量 .