Cassandraのデータモデル

ざっくりとしたイメージおよび解説。説明が下手なので画像だけ見た方がいいかも。。。

f:id:terurou:20100403013546p:image

KeySpace
ColumnFamilyの集合。RDBMSでいうところのDatabaseに該当する感じ。
ColumnFamily
Key-RowのHashMap(HashMap)みたいな感じ。
Key
1つのRowを示すキー文字列。CassandraではKeyによってデータの分散先(保存先ノード)が確定する。
Row
Keyに対するColumnもしくはSuperColumnの集合。ColumnとSuperColumnのどちらが入るかはstorage-conf.xmlの設定による。
また、Cassandraの内部では、Row内のColumnはColumnNameによってソートし保存されている。ソート方法についてもstorage-conf.xmlの設定によって確定する。
Column
Cassandraで最小のデータ単位。Calumnはnameとvalue(とtimestamp)を持つ。
SuperColumn
イメージとしては、LinkedHashMap>みたいな感じ。Rowの中身がSuperColumnだった場合、SuperColumnNameが第1キー、ColumnNameが第2キーとしてソートされ保存されている。

CassandraのWikiにも書いてあるけど、Cassandraは4段(Columnの場合) or 5段(SuperColumnの場合)のHashMapだというのが一番イメージしやすいのかも。無理やりJava風に表記するとこんな感じか。

4段(Columnの場合)

HashMap<Keyspace : string,                  // 1.Keyspace
  HashMap<ColumnFamilyName : string,        // 2.ColumnFamily
    HashMap<Key : string,                   // 3.Key
      LinkedHashMap<ColumnName, Column>>>>  // 4.Column(Row)

5段(SuperColumnの場合)

HashMap<Keyspace : string,                     // 1.Keyspace
  HashMap<ColumnFamilyName : string,           // 2.ColumnFamily
    HashMap<Key : string,                      // 3.Key
      LinkedHashMap<SuperColumnName,           // 4.SuperColumn(Row)
        LinkedHashMap<ColumnName, Column>>>>>  // 5.Column