假设我有下表:
id text PRIMARY_KEY,
question_asked (int?),
question_answered (int?)
此表将由同一用户每次更新。他不能同时更新此表。
我要使用以下查询:
UPDATE %s.%s SET question_asked = question_asked + 1 WHERE %s = :execution_id;
如果我在更新此特定案例时使用本地\u仲裁。我对一致性有什么问题吗?如果是这样,我会很高兴理解为什么
我对计数器很熟悉,直到现在我都是这样使用的。使用counter的问题是我不能定义ttl。
2条答案
按热度按时间s8vozzvw1#
不,这在Cassandra是不可能的,除非你用一种叫做
counter
. 但它也有自己的问题——因为它不是幂等的,所以在服务器端出错时不会重试,这可能会导致不正确的结果。作为解决方法,您可以尝试使用轻量级事务,但它们非常重,因此在使用它们时不要期望高吞吐量。
yftpprvb2#
对于此类操作,请查看计数器列:
https://cassandra.apache.org/doc/latest/cql/types.html#counters
https://docs.datastax.com/en/cql/3.3/cql/cql_using/usecountersconcept.html
请记住,不同于正常数据的cassandra威胁计数器和计数器列需要位于单独的列族中。-