akishin999の日記

調べた事などを書いて行きます。

Ruby から Cassandra を使ってみる

前回 Ruby の Cassandra 接続用ライブラリである Cassandara をインストールしたので、今回はいろいろと使い方を調べてみたいと思います。


fauna's cassandra at master - GitHub
http://github.com/fauna/cassandra

keyspaces

接続しているクラスタで使用可能な Keyspace の一覧を取得するサンプルです。

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

client = Cassandra.new("Keyspace1", "127.0.0.1:9160")

p client.keyspaces


実行結果は以下のようになります。

["Keyspace1", "system", "Examples"]

get

前回も試しましたが、一件分のデータを取得するサンプルです。

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

client = Cassandra.new("Keyspace1", "127.0.0.1:9160")

p client

p client.get(:Standard1, 'jsmith')
p client.get(:Standard1, 'foo')


実行結果は以下のようになります。

C:\src\ruby>ruby cassandra_example.rb
#<Cassandra:32155596, @keyspace="Keyspace1", @schema={}, @servers=["127.0.0.1:9160"]>
#<OrderedHash {"last"=>"Smith", "first"=>"John", "age"=>"42"}>
#<OrderedHash {"last"=>"baz", "first"=>"bar", "age"=>"99"}>

insert

データ登録のサンプルです。

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

client = Cassandra.new('Keyspace1', '127.0.0.1:9160')

client.insert(:Standard1, 'bar', { 'name' => 'bar' } )
client.insert(:Standard1, 'bar', { 'age' => '99' } )
p client.get(:Standard1, 'bar')


実行結果は以下のようになります。

#<OrderedHash {"name"=>"bar", "age"=>"99"}>


一括で複数カラムを更新したい場合は第3引数のハッシュに複数指定します。

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

client = Cassandra.new('Keyspace1', '127.0.0.1:9160')

client.insert(:Standard1, 'bar', { 'name' => 'bar', 'age' => '200', 'foo' => 'baz' } )
p client.get(:Standard1, 'bar')


出力は以下のようになります。

#<OrderedHash {"name"=>"bar", "foo"=>"baz", "age"=>"200"}>

remove

データ削除のサンプルです。

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

client = Cassandra.new('Keyspace1', '127.0.0.1:9160')

client.remove(:Standard1, 'bar')
p client.get(:Standard1, 'bar')


実行結果は以下のようになります。

#<OrderedHash {}>

count_columns

カラム数カウントのサンプルです。

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

client = Cassandra.new('Keyspace1', '127.0.0.1:9160')

p client.count_columns(:Standard1, 'jsmith')


実行結果は以下のようになります。

3


まだ他にもメソッドはありますが、取り合えず今回はこんなところで。


Cassandra はさすがに「High level clients」として紹介されているだけあって、標準添付の Java 版クライアントに比べると引数がシンプルに指定できるように Wrap されていたりと、非常に使い易いライブラリになっていますね。


ただ、お手軽に Windows 環境で試しているからか、若干接続が不安定な挙動を示したりもしました。
あるサンプルを実行した時に、タイミングによって成功したり、接続エラーになったり、といった感じです。
これは私の環境の問題なのか、そもそも Windows でがんばるな!って事なのかは不明ですが・・・。


ちょっと時間がある時に Linux 環境でも試してみたいと思います。