LoginSignup
4
1

More than 5 years have passed since last update.

cassandra でインクリメントしたい

Last updated at Posted at 2015-04-23

一言まとめ

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 をインクリメントするためだけにわざわざ現在の pvselect してやる必要があります。

そこで、エラーメッセージにも出てるように 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

参考

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1