2012-01-11 74 views
0

我想用下面的代碼更新場...
卡桑德拉CQL比較式計數器

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

我第一次嘗試,我得到了以下故障:
CassandraCQL ::錯誤:: InvalidRequestException :非交換列家族的無效操作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) 

回答

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") 

您必須使用「更新」改變計數器值,對計數器沒有插入語句(在定製列表更新和插入做同樣的事情,所以你可以create new rows using update)。

目前你不能在同一列族櫃檯和非櫃檯(從wiki:「A列的家庭或者只包含櫃檯,或根本沒有櫃檯都沒有。」)

+0

感謝你好你的答案,我嘗試過,但我得到以下失敗...
CassandraCQL :: Error :: InvalidRequestException:default_validation_class不是CREATE COLUMNFAMILY的有效關鍵字參數
你知道爲什麼會發生這種情況嗎?寶石版本是cassandra-cql 1.0.2和cassandra版本是1.0.6 – user934801 2012-01-11 08:50:14

+0

對不起,它只是default_validation而不是default_validation_class。我糾正了答案。 – psanford 2012-01-11 16:19:49

+0

非常感謝你! – user934801 2012-01-12 13:28:17