Cassandra cql比较器类型计数器

时间:2012-01-11 01:56:48

标签: ruby-on-rails cassandra cql

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

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

我第一次尝试,我得到了以下失败:
CassandraCQL :: Error :: InvalidRequestException:非交换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)

1 个答案:

答案 0 :(得分: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")

您必须使用'update'来更改计数器值,没有计数器的插入语法(在CQL更新和插入中执行相同的操作,因此您可以create new rows using update)。

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