前回はCassandraのデータモデルについて説明しました。今回は実際にデータ設定とJavaコードからCassandraにアクセスする基本を見ていきます。コードはEclipseで書くことを前提に進めていきます。
Cassandraの設定で最低限必要な3つの項目
Cassandraの設定はすべてconf/
設定が必要なのは以下の項目になります。
- ① キースペース,
カラムファミリの設定 - ColumnType属性
- CompareWith属性
- CompareSubcolumnsWith属性
- ② コミットログとデータディレクトリを設定する
- ③ ノードを設定する
キースペース,カラムファミリを設定する
何はともあれ,
<Keyspaces>
<!-- キースペースは複数定義できる -->
<!-- キースペースKeyspace1の定義 -->
<Keyspace Name="Keyspace1">
<!-- カラムファミリStandard1の定義 -->
<ColumnFamily Name="Standard1" CompareWith="BytesType"/>
<!-- カラムファミリSuper1の定義 -->
<ColumnFamily Name="Super1" ColumnType="Super"
CompareWith="BytesType" CompareSubcolumnsWith="BytesType" />
Name属性は見たとおりなので割愛します。ColumnFamilyには,
ColumnFamilyで設定すべき属性は,
ColumnType属性
前回説明したとおり,
上記の例では,
- "Standard1"という名前のColumnFamily
→カラムだけが含まれるカラムファミリ - "Super1"という名前のColumnFamily
→ColumnTypeに"Super"と指定があるので,スーパーカラムだけが含まれるカラムファミリ
ColumnType属性はStandardまたはSuperのどちらかを選択できます。ColumnType属性に何も記載がないとStandardになります。
表1 ColumnType属性の種別
ColumnType設定項目 | 説明 |
---|---|
Standard | カラムファミリ内にカラムが含まれる |
Super | カラムファミリ内にスーパーカラムが含まれる |
CompareWith属性
次に目につく設定がCompareWithです。これは検索時のカラムのソートのための設定項目です。検索実行時にこのCompareWithで指定されたクラスを使ってカラムがソートされ,
CompareWith設定には,
表2 CompareWithの設定種別
CompareWith設定項目 | 説明 |
---|---|
BytesType | byte[]で比較する。値の検証はしない。 |
UTF8Type | UTF8でも文字列比較をする。 |
AsciiType | byte[]での比較に加えてUS-ASCIIでのエンコードの検証をする。 |
LongType | 64ビット長のlong値で比較する。 |
LexicalUUIDType | 128ビット長UUIDのbyte[]値を比較する。 |
TimeUUIDType | 128ビット長UUIDのタイムスタンプを比較する。 |
具体例を見てみましょう。以下の例ではUTF-8でカラムをソートします。
<ColumnFamily Name="utf8Order" CompareWith="UTF8Type" />
イメージとしては以下のようになります。カラム名がUTF-8順にソートされます。
SuperColumn:utf8Order | |||
---|---|---|---|
key | Column | ||
hoge | name | value | timestamp |
111 | 222 | 1273285360339 | |
aaa | value | 1273285360339 | |
name | shinpei | 1273285360339 | |
こんにちは | さようなら | 1273285360339 |
CompareSubcolumnsWith属性
CompareSubcolumnsWith属性は,
スーパーカラムの場合,
- スーパーカラムのソート
→CompareWith - スーパーカラム内のカラムのソート
→CompareSubcolumnsWith
という形で使い分けます。指定できる項目はCompareWithと同様です。
具体例を見てみましょう。
<ColumnFamily Name="time_utf8Order"
ColumnType="Super" CompareWith="LongType"
CompareSubcolumnsWith="UTF8Type"/>
この例ではCompareWithに"LongType",
以下のようなイメージになります。
ColumnFamily:time_ |
||||
---|---|---|---|---|
key | SuperColumn | |||
hoge | key | Column | ||
1273284729294 | name | value | timestamp | |
moge | aaa | 1273284729294 | ||
muga | bbb | 1273284729294 | ||
1273284729347 | name | value | timestamp | |
moge | ccc | 1273284729347 | ||
muga | ddd | 1273284729347 |
キースペース,
他にも,