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)
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top