Счетчик типа компаратора Cassandra cql - PullRequest
0 голосов
/ 11 января 2012

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

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

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

1 Ответ

2 голосов
/ 11 января 2012

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

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

...