Счетчик типа компаратора cassandra cql

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

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

В первый раз, когда я попробовал, у меня возникла следующая ошибка:
CassandraCQL :: Error :: InvalidRequestException: недопустимая операция для некоммутативного семейства столбцов user_count
Я обнаружил, что мне нужно использовать счетчик компаратора, но я не могу найти как я могу настроить это с помощью драгоценного камня 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)

person user934801    schedule 11.01.2012    source источник


Ответы (1)


Вам нужно установить 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 update и insert делают то же самое, поэтому вы можете создать новые строки с помощью обновления).

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

person psanford    schedule 11.01.2012
comment
Привет, спасибо за ваш ответ, я пробовал это, но получаю следующую ошибку ... ‹br/› CassandraCQL :: Error :: InvalidRequestException: default_validation_class не является допустимым аргументом ключевого слова для CREATE COLUMNFAMILY ‹br/› вы знаете, почему это происходит ? версия gem - cassandra-cql 1.0.2, а версия cassandra - 1.0.6 - person user934801; 11.01.2012
comment
Извините, это просто default_validation вместо default_validation_class. Я поправил ответ. - person psanford; 11.01.2012