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>>
これで大体試した感じでしょうか。
ちょっと疲れたので、今日はここまでにしておきます。
Instant Apache Cassandra for Developers Starter
posted with amazlet at 13.06.05
Vivek Mishra
Packt Publishing
Packt Publishing