0

我想使用以下代码更新字段...

@@db.execute("UPDATE user_count SET counters = counters + #{val} WHERE cid = 1 ")

我第一次尝试时遇到以下失败:
CassandraCQL::Error::InvalidRequestException: invalid operation for non commutative columnfamily user_count
我发现我必须使用比较器计数器,但我找不到如何使用 cassandra 进行设置-cql gem...有人知道我怎样才能让它工作吗?下面是我的代码不起作用...

@@db.execute("CREATE COLUMNFAMILY user_count(cid varchar PRIMARY KEY, counters counter) with comparator = counter " )
@@db.execute("INSERT INTO user_count (cid, counters) VALUES (?,?)", 1, 0)
4

1 回答 1

2

您需要设置 default_validation=CounterColumnType 而不是比较器。

@@db.execute("CREATE COLUMNFAMILY user_count(cid varchar PRIMARY KEY, counters counter) with default_validation=CounterColumnType")
@@db.execute("update user_count set counters = counters + 1 where cid = 1")

您必须使用“更新”来更改计数器值,计数器没有插入语法(在 CQL 中更新和插入执行相同的操作,因此您可以使用更新创建新行)。

目前,您不能在同一列族中拥有计数器和非计数器(来自wiki:“列族要么只包含计数器,要么根本不包含计数器。”)

于 2012-01-11T03:11:55.927 回答