J'ai un problème étrange avec la base de données Cassandra (version 2.2.3) et j'utilise des colonnes statiques pour écrire une preuve de concept pour une application simple avec la fonctionnalité d'envoi d'argent.Échec de la mise à jour de la colonne statique dans cassandra
Ma table est:
CREATE TABLE transactions (
profile text,
timestamp timestamp,
amount text,
balance text,
lock int static,
PRIMARY KEY (profile, timestamp)) WITH CLUSTERING ORDER BY (timestamp ASC);
Première étape ajouter de nouveaux enregistrement
INSERT INTO transactions (profile, timestamp, amount) VALUES ('test_profile', '2015-11-05 15:20:01+0000', '10USD');
Ensuite, je veux 'verrouiller' transaction utilisateur en cours pour faire une action avec son équilibre. J'essaie d'exécuter cette demande:
UPDATE transactions SET lock = 1 WHERE profile = 'test_profile' IF lock = null;
Mais comme résultat dans cqlsh Je vois
[applied]
-----------
False
Je ne comprends pas pourquoi « Faux », parce que les données actuelles pour le profil est:
profile | timestamp | lock | amount | balance
--------------+--------------------------+------+--------+---------
test_profile | 2015-11-05 15:20:01+0000 | null | 10USD | null
Une idée de ce que je fais mal?
MISE À JOUR
Après lecture Nenad Bozic réponse que je modifie mon exemple pour expliquer pourquoi je dois condition mise à jour. exemple de code complet
CREATE TABLE transactions (
profile text,
timestamp timestamp,
amount text,
balance text,
lock int static,
balances map<text,text> static,
PRIMARY KEY (profile, timestamp)
) WITH CLUSTERING ORDER BY (timestamp ASC);
INSERT INTO transactions (profile, timestamp, amount) VALUES ('test_profile', '2015-11-05 15:20:01+0000', '1USD');
INSERT INTO transactions (profile, lock) VALUES ('test_profile', 1) IF NOT EXISTS;
BEGIN BATCH
UPDATE transactions SET balances={'USD':'1USD'} WHERE profile='test_profile';
UPDATE transactions SET balance='1USD' WHERE profile='test_profile' AND timestamp='2015-11-05 15:20:01+0000';
DELETE lock FROM transactions WHERE profile='test_profile';
APPLY BATCH;
Et si je tente à nouveau de se verrouiller je reçois
INSERT INTO transactions (profile, lock) VALUES ('test_profile', 1) IF NOT EXISTS;
[applied] | profile | timestamp | balances | lock | amount | balance
-----------+--------------+-----------+-----------------+------+--------+---------
False | test_profile | null | {'USD': '1USD'} | null | null | null
pourrait être la même question que https://issues.apache.org/jira/browse/CASSANDRA-10532 –
je test dans ' cassandra 3.0.0-rc2' et ça marche ... Mais pas dans d'autres versions ... – greenhost87