我在Cassandra中使用了宽行模式。我的表定义如下:
CREATE TABLE usertopics (
key text,
topic text,
score counter,
PRIMARY KEY (key, topic)
)
我使用以下方式插入条目:
UPDATE usertopics SET score = score + ? WHERE key=? AND topic=?
这样如果密钥不存在,它将插入,如果它存在,它将更新。
我删除使用的条目:
Delete form usertopics where key in ?
但是在删除后我再次尝试更新时,它没有更新。它没有给出任何错误,但它也没有在db中反映出来。
当我截断表格时,它会再次完美插入。我使用Datastax java驱动程序访问Cassandra。有什么建议吗?
答案 0 :(得分:5)
来自cassandra文档 -
反移除本质上是有限的。例如,如果您发出 很快,序列“递增,移除,递增”它 可能会导致删除(如果由于某种原因删除 恰好是最后收到的消息)。因此,删除柜台 仅用于最终删除,即删除时 之后,计数器不会增加。 这也适用于行删除: 如果删除一行计数器,则递增该行中的任何计数器 (在删除之前存在)将导致未确定 行为即可。请注意,如果您需要重置一个计数器,一个选项(那个 不幸的是,并非安全)可能是读取它的价值和 add -value。
删除后,不能/不应使用具有相同密钥的计数器。请使用以下链接获取更多信息 -
https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html https://wiki.apache.org/cassandra/Counters