cassandraに挑戦 その3 get_slice
前回に引き続き、bin/cassandra-cliを使って
もう少し深い機能を理解してみた。
ドキュメントを読みつつ、Googleで検索しつつ
手探りで機能を体で理解していく。
まちがってる部分があるかもしれないが、
とりあえず、自分の理解を書いてみる。
まずは、
ということ。4次元とは、
Key = Value
の形だが、Keyが多層構造になってる、ということ。
データ構造を4次元にするか、5次元にするかなども含めて、
定義はすべて、
conf/storage-conf.xml
に書きます。
また、Keyの次元は、上から名前が付いています。4次元の場合、
ここで重要なのが、Keyspace と Column Familiesは
conf/storage-conf.xmlを書き換えても、再起動をしないと
追加/変更ができない、という点です。
プロセスの起動前に定義しておかなければいけません。
逆に言うと、KeyspaceとColumn Familiesは可変ではないが、
Row と Column 随時追加可能です。好き放題データを突っ込めます。
さらに、cassandraにある機能で便利なものが、get_sliceで、
以下のようなデータの取得ができます。
book1/price = 500yen
というデータに対して、
( この場合、book1がrow、
title/priceがcolumn name、
dragon ball/priceが column value )
通常のKVSなら、book1/titleとbook1/priceの両方の値を欲しいときは
それぞれ1回ずつ合計2回問い合わせてすべてのcolumn valuesを
取得するしか方法がないが、cassandraの場合、
book1を指定するだけで、それにぶら下がるものすべてを
1回で取得できるようになっている。
これは便利。なぜなら、1回の問い合わせで取得できるのはもちろんのこと、
book1以下にどのようなKEYがぶらさがっているかを知らない場合も
値をすべて取得できるから。
さらに5次元のハッシュの場合、便利さは際立って、
cassandraは、単純なKVSよりも高機能であることがわかった。
こんなに高機能でありながら、高速に動作してくれるらしいので
今後は性能について調べて見ようと思う。
もう少し深い機能を理解してみた。
ドキュメントを読みつつ、Googleで検索しつつ
手探りで機能を体で理解していく。
まちがってる部分があるかもしれないが、
とりあえず、自分の理解を書いてみる。
まずは、
cassandraは、4次元または5次元のハッシュ構造としてデータを持てる、
Cassandra has a data model that can most easily be thought of as a four or five dimensional hash.
ということ。4次元とは、
- 日本/東京都/世田谷区/二子玉川 = 'セレブな街'
- 日本/東京都/世田谷区/田園調布 = 'お金持ちな街'
- 日本/東京都/港区/六本木/6丁目 = '六本木ヒルズがあります'
- 日本/東京都/港区/六本木/1丁目 = '森ビルがあります'
- 日本/東京都/港区/六本木/3丁目 = 'ほげほげがあります'
Key = Value
の形だが、Keyが多層構造になってる、ということ。
データ構造を4次元にするか、5次元にするかなども含めて、
定義はすべて、
conf/storage-conf.xml
に書きます。
また、Keyの次元は、上から名前が付いています。4次元の場合、
- Keyspace
- Column Families
- Rows
- Column ( name and value and timestamp)
- Keyspace
- Column Families
- Super Columns
- Rows
- Column ( name and value and timestamp)
ここで重要なのが、Keyspace と Column Familiesは
conf/storage-conf.xmlを書き換えても、再起動をしないと
追加/変更ができない、という点です。
プロセスの起動前に定義しておかなければいけません。
逆に言うと、KeyspaceとColumn Familiesは可変ではないが、
Row と Column 随時追加可能です。好き放題データを突っ込めます。
さらに、cassandraにある機能で便利なものが、get_sliceで、
以下のようなデータの取得ができます。
cassandra> set Keyspace1.Standard1['book1']['title'] = 'dragon ball'book1/title = dragon ball
Value inserted.
cassandra> set Keyspace1.Standard1['book1']['price'] = '500yen'
Value inserted.
cassandra> get Keyspace1.Standard1['book1']
=> (column=title, value=dragon ball, timestamp=1267713708356)
=> (column=price, value=500yen, timestamp=1267713720682)
Returned 2 results.
book1/price = 500yen
というデータに対して、
( この場合、book1がrow、
title/priceがcolumn name、
dragon ball/priceが column value )
通常のKVSなら、book1/titleとbook1/priceの両方の値を欲しいときは
それぞれ1回ずつ合計2回問い合わせてすべてのcolumn valuesを
取得するしか方法がないが、cassandraの場合、
book1を指定するだけで、それにぶら下がるものすべてを
1回で取得できるようになっている。
これは便利。なぜなら、1回の問い合わせで取得できるのはもちろんのこと、
book1以下にどのようなKEYがぶらさがっているかを知らない場合も
値をすべて取得できるから。
さらに5次元のハッシュの場合、便利さは際立って、
cassandra> set Keyspace1.Super1['store1']['item1']['price'] = '100'というデータを入れたときに、
Value inserted.
cassandra> set Keyspace1.Super1['store1']['item1']['title'] = 'ipod'
Value inserted.
cassandra> set Keyspace1.Super1['store1']['item2']['price'] = '200'
Value inserted.
cassandra> set Keyspace1.Super1['store1']['item2']['title'] = 'sony walkman'
Value inserted.
cassandra> set Keyspace1.Super1['store2']['item1']['price'] = '1000'
Value inserted.
cassandra> set Keyspace1.Super1['store2']['item1']['title'] = 'manga'
Value inserted.
cassandra> set Keyspace1.Super1['store2']['item2']['price'] = '2000'
Value inserted.
cassandra> set Keyspace1.Super1['store2']['item2']['title'] = 'cake'
Value inserted.
cassandra> get Keyspace1.Super1['store2']↑これでstore2に含まれる商品とその情報を一発で取得できるし、
=> (super_column=item2,
(column=price, value=2000, timestamp=1267714355659)
(column=title, value=cake, timestamp=1267714368210))
=> (super_column=item1,
(column=price, value=1000, timestamp=1267714336347)
(column=title, value=manga, timestamp=1267714346761))
Returned 2 results.
cassandra> get Keyspace1.Super1['store2']['item2']↑これでstore2/item2の商品情報を一発で取得することもできる。
=> (column=title, value=cake, timestamp=1267714368210)
=> (column=price, value=2000, timestamp=1267714355659)
Returned 2 results.
cassandraは、単純なKVSよりも高機能であることがわかった。
こんなに高機能でありながら、高速に動作してくれるらしいので
今後は性能について調べて見ようと思う。