akishin999の日記

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

Ruby から Cassandra を使ってみる その2

Windows から Ruby で Cassandra を使うための準備
Ruby から Cassandra を使ってみる

あたりの続きです。

get_columns

単一のカラムの値を取得する get_columns のサンプルコードです。
カラムは配列で複数指定可能です。

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

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

p client.get_columns(:Standard1, 'jsmith', ['first'])


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

["John"]

multi_get

複数のキーの値を取得する multi_get のサンプルコードです。

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

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

client.multi_get(:Standard1, ['jsmith', 'foo']).each { |obj|
  p obj
}


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

["jsmith", #<OrderedHash {"last"=>"Smith", "first"=>"John", "age"=>"42"}>]
["foo", #<OrderedHash {"last"=>"baz", "first"=>"bar", "age"=>"99"}>]

exists

カラムの存在を調べる exists メソッドのサンプルコードです。

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

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

p client.exists?(:Standard1, 'jsmith', 'last')
p client.exists?(:Standard1, 'jsmith', 'hoge')


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

"Smith"
nil


存在する場合はそのカラムの値を、存在しない場合は nil を帰すので、if 文の条件に使用できます。

get_range

指定した範囲を取得する get_range のサンプルコードです。
このサンプルでは使っていませんが、第二引数のハッシュに「:count」、「:start」、「:finish」、「:consistency」などのオプションが指定可能です。

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

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

client.get_range(:Standard1).each { |obj|
  p "Key : #{obj.key}"
  obj.columns.each { |col|
    p col
  }
}


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

"Key : bar"
"Key : jsmith"
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"age", value:"42", timestamp:1272735453051>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"first", value:"John", timestamp:1272642224288>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"last", value:"Smith", timestamp:1272735425532>>
"Key : foo"
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"age", value:"99", timestamp:1272767301695000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"first", value:"bar", timestamp:1272767244630000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"last", value:"baz", timestamp:1272767265757000>>

count_range

Column Family の全ての行数を取得する count_range のサンプルコードです。

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

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

p client.count_range(:Standard1)


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

2

batch

ブロックを渡して一括処理を行う batch メソッドのサンプルコードです。

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

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

client.batch do
  client.insert(:Standard1, '001', { 'first' => 'shin', 'last' => 'akiyama', 'age' => '31' })
  client.insert(:Standard1, '002', { 'first' => 'taro', 'last' => 'yamada', 'age' => '20' })
  client.insert(:Standard1, '003', { 'first' => 'hanako', 'last' => 'sato', 'age' => '15' })
end

# 追加したデータを取得してみる
client.get_range(:Standard1).each { |obj|
  p "Key : #{obj.key}"
  obj.columns.each { |col|
    p col
  }
}


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

"Key : 003"
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"age", value:"15", timestamp:1273583337991000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"first", value:"hanako", timestamp:1273583337991000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"last", value:"sato", timestamp:1273583337991000>>
"Key : 001"
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"age", value:"31", timestamp:1273583337991000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"first", value:"shin", timestamp:1273583337991000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"last", value:"akiyama", timestamp:1273583337991000>>
"Key : bar"
"Key : jsmith"
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"age", value:"42", timestamp:1272735453051>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"first", value:"John", timestamp:1272642224288>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"last", value:"Smith", timestamp:1272735425532>>
"Key : foo"
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"age", value:"99", timestamp:1272767301695000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"first", value:"bar", timestamp:1272767244630000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"last", value:"baz", timestamp:1272767265757000>>
"Key : 002"
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"age", value:"20", timestamp:1273583337991000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"first", value:"taro", timestamp:1273583337991000>>
<CassandraThrift::ColumnOrSuperColumn column:<CassandraThrift::Column name:"last", value:"yamada", timestamp:1273583337991000>>


これで大体試した感じでしょうか。
ちょっと疲れたので、今日はここまでにしておきます。