読者です 読者をやめる 読者になる 読者になる

プログラマでありたい

おっさんになっても、プログラマでありつづけたい

RubyとCassandraの連携のサンプルプログラム

 先日インストールしたCassandraを、Rubyから使ってみようと思います。
gemで用意されているのかなと期待したら、やっぱりありました。幸せ

インストール

# gem install cassandra
 中略
Installing RDoc documentation for thrift_client-0.4.2...
Installing RDoc documentation for rake-0.8.7...
Installing RDoc documentation for simple_uuid-0.1.1...
Installing RDoc documentation for cassandra-0.8.2...

サンプルコード

require 'rubygems'
require 'cassandra'
include Cassandra::Constants

keyspace = Cassandra.new('Keyspace1')

#保存
first_name = {'first' => 'Key'}
last_name = {'last' => 'Smith'}
age = {'age' => '35'}
keyspace.insert(:Standard2, 'ksmith', first_name)
keyspace.insert(:Standard2, 'ksmith', last_name)
keyspace.insert(:Standard2, 'ksmith', age)

#取得
p keyspace.get(:Standard2, 'ksmith')


実行

# ruby cassandra_sample.rb
#"Smith", "first"=>"Key", "age"=>"35"}>

解説っぽいもの

Cassandra単体のデータ構造は、Keyspace > (Super)ColumnFamily > Columnになっています。
上記の例では、まずKeyspace1のインスタンスを作成しています。
そして、それぞれのカラムを用意して、keyspace1のStandard2というColumnFamilyにデータを入れていっています。
このColumnFamilyのキーは、'ksmith'です。(キーは任意に設定できます。)

コマンドラインインタフェースから確認

# bin/cassandra-cli --host localhost --port 9160
cassandra> get Keyspace1.Standard2['ksmith']
=> (column=last, value=Smith, timestamp=1271987442338167)
=> (column=first, value=Key, timestamp=1271987442337022)
=> (column=age, value=35, timestamp=1271987442338914)
Returned 3 results.


基本的にはCassandraはKeyValueStore型のデータベースなので、覚えることは最小限なので使いやすそうですね。
KeyspaceやColumnFamilyをどの単位でまとめるかとかがポイントになりそうです。
もうちょっと遊んでみます。楽しいですね。


関連:
Apache Cassandraのインストール
fauna's cassandra at master - GitHub
DataModel - Cassandra Wiki
Symfoware Cassandraの使いどころ(Looking to the future with Cassandraの翻訳)
up and running with cassandra:: snax