2012-01-11 6 views
0

я хочу использовать следующий код для обновления поля ...
Cassandra CQL типа компаратор счетчик

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

Первый раз я попробовал, что я получил следующий провал:
CassandraCQL :: Ошибка :: InvalidRequestException : недействительная операция для некоммутативного columnfamily user_count
Я выяснил, что мне нужно использовать счетчик компаратора, но я не могу найти, как я могу настроить это с помощью gem cassandra-cql ... кто-нибудь знает, как я могу заставить это работать ? ниже есть мой код, который не работает ...

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

Вы должны использовать «обновление», чтобы изменить значение счетчика, нет вставки синтаксиса для счетчиков (в обновлении CQL и вставляет сделать то же самое, так что вы можете create new rows using update).

В настоящее время вы не можете иметь счетчики и не-счетчики в одной и той же семьи колонке (от wiki: «Семейство столбцов содержит либо только счетчики, или никакие счетчики на все.»)

+0

Привет спасибо за ответ, я попробовал это, но я получил следующий сбой ...
CassandraCQL :: Error :: InvalidRequestException: default_validation_class не является допустимым аргументом ключевого слова для CREATE COLUMNFAMILY
знаете ли вы, почему это происходит? версия gem - cassandra-cql 1.0.2, а версия cassandra - 1.0.6 – user934801

+0

Извините, это просто default_validation вместо default_validation_class. Я исправил ответ. – psanford

+0

большое спасибо !!! – user934801