一言まとめ
counter
型を使いましょう。
説明
increment/decrement したい
よくある例だと、PVとかツイート数とかお気に入り数とか。
単純に数を保持しているだけのカラムがほしいことってよくありますよね。
例えば、以下のようなテーブル(ColumnFamily)を作ります。
CREATE TABLE page_view_counts(
pv int,
url_name varchar,
page_name varchar,
PRIMARY KEY (url_name, page_name)
);
はい、そこの MySQL に慣れてるあなた。
以下のようなクエリ書けばいいじゃんって思いましたか?
UPDATE page_view_counts
SET pv = pv + 1
WHERE url_name='www.datastax.com' AND page_name='home';
甘いです。CQLはそんなに優しくないです。
UPDATE page_view_counts SET pv = pv + 1 WHERE url_name='www.datastax.com' AND page_name='home';
-> Bad Request: Invalid operation (pv = pv + 1) for non counter column legion
怒られちゃうんですね。
これでは、 pv
をインクリメントするためだけにわざわざ現在の pv
を select
してやる必要があります。
そこで、エラーメッセージにも出てるように counter
というデータタイプを使いましょう。
CREATE TABLE counterks.page_view_counts(
pv counter, // コレ
url_name varchar,
page_name varchar,
PRIMARY KEY (url_name, page_name)
);
もう一度。
UPDATE page_view_counts SET pv = pv + 1 WHERE url_name='www.datastax.com' AND page_name='home';
-> OK
参考