Cassandra cql compteur de type comparateur
-
26-10-2019 - |
Question
Je veux utiliser le code suivant pour mettre à jour un champ ...
@@db.execute("UPDATE user_count SET counters = counters + #{val} WHERE cid = 1 ")
La première fois que je l'ai essayé que je suis échouer ce qui suit:
CassandraCQL :: Erreur :: InvalidRequestException: opération non valide pour non commutative columnfamily USER_COUNT
Je trouve que je dois utiliser le compteur de comparaison, mais je ne peux pas trouver comment je peux configurer cela avec la gemme cassandra-cql ... Quelqu'un sait comment je peux obtenir ce travail?
ci-dessous, il est mon code qui ne fonctionne pas ...
@@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)
La solution
Vous devez définir default_validation = CounterColumnType au lieu du comparateur.
@@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")
Vous devez utiliser « mise à jour » pour changer la valeur du compteur, il n'y a pas de syntaxe d'insertion pour les compteurs (dans la mise à jour CQL et insérez faire la même chose que vous pouvez créer de nouvelles lignes à l'aide mise à jour ).
À l'heure actuelle vous ne pouvez pas avoir des compteurs et des non-compteurs dans la même famille de la colonne (de la wiki : «Une famille de colonne ne contient que ce soit des compteurs, ou pas du tout compteurs »)