前回までの説明でCassandraのインストールと動かすところまでいきました。今回はCassandraのデータモデルを理解して,
データはすべて4次元または5次元の連想配列
Cassandraのデータは非常にシンプルなデータモデルを持っています。データはすべて4次元または5次元の連想配列のようになっています。
4次元の場合は以下の形で値にアクセスします。
[キースペース][カラムファミリ][キー][カラム]
そして5次元の場合は以下の形でデータを特定します。
[キースペース][カラムファミリ][キー][スーパーカラム][カラム]
Cassandraのデータモデルは以下の4つの概念で成り立っています。
- カラム:
- データの最小単位。実際のキーと値,
そしてタイムスタンプを持つ。 - スーパーカラム:
- カラムの集合を扱う単位。
- カラムファミリ:
- カラムまたはスーパーカラムの集合を扱う単位。RDBMSでいうところのテーブル。
- キースペース:
- RDBMSでいうところのデータベース。一般に1アプリケーションで1つ使用する。
1つ1つ見ていきましょう。
カラム ─データ構造の最小単位
カラムとは,
- name:カラムにアクセスするためのキー
- value:カラムの値
- timestamp:カラムの更新日時
これらの値はすべてアプリケーションから与えられるもので,
Column | ||
---|---|---|
name(byte[]) | value(byte[]) | timestamp(long) |
これがもっとも基本的なデータ構造になります。たとえばカラム
Column:twitter | ||
---|---|---|
shot6 | 1271419252387 |
スーパーカラム ─カラムの集合を扱う
スーパーカラムはカラムの集合を扱うデータ構造です。複数のカラムを束ねて,
スーパーカラムは以下の項目を保持しています。
- key:
- このスーパーカラムにアクセスするためのキーです。
- value:
- このスーパーカラムで保持するカラムの配列です。
スーパーカラムはタイムスタンプを持たないのが特徴です。使い方としては,
- スーパーカラムのキーでカラムの集合を特定する
- 第2のキーとして,
カラム名でカラムを特定する
データ構造を図示すると以下のようになります。
SuperColumn | |
---|---|
key | byte[] |
value | Column[] |
具体例で見てみましょう。
複数Webサービスのプロフィールを表現するスーパーカラム
SuperColumn:profile | |||
---|---|---|---|
key | Column | ||
hatena | name | value | timestamp |
id | shot6 | 1271419252387 | |
firstname | Shinpei | 1271419252387 | |
lastname | Ohtani | 1271419252387 | |
lastupdate | 2010/ | 1271419252387 | |
name | value | timestamp | |
userid | shot6 | 1271419252387 | |
name | Shinpei Ohtani | 1271419252387 | |
location | Tokyo | 1271419252387 | |
web | htttp:// | 1271419252387 |
この場合,
では次に,
実はCassandraではカラムファミリごとに異なるカラムを持つことができます。カラムは実行時に追加できるので,