Ruby経由でCassandra 2回目

あー,油断してたら1ヶ月以上経っちゃった...
前回はrequireするところまでだったので,今度はごく普通に使ってみる.

基本的な操作

クライアントの生成

# キースペース名とサーバ名は適宜編集しましょう
client = Cassandra.new('MyKeyspace', 'server:9160')


データのinsert

# set MyKeyspace.Scores['Dan']['grade']['null'] = '1'に相当
client.insert(:Scores, "Dan", {"grade" => {"null" => "1"}})


データのget

# get MyKeyspace.Scores['Dan']['cource']['math']に相当
client.get(:Scores, "Dan", "cource", "math")


行数カウント

# count MyKeyspace.Scores['Dan']に相当
client.count_columns(:Scores, "Dan")

動作確認

いったん今までのデータを削除してから,Ruby経由でinsertできるかやってみる.

# CLI経由で削除
cassandra-cli -host localhost -port 9160

del MyKeyspace.Scores['Dan']
row removed.
del MyKeyspace.Scores['Dana']
row removed.

# 確かにいなくなった
get MyKeyspace.Scores['Dan'] 
Returned 0 results.
get MyKeyspace.Scores['Dana']
Returned 0 results.


あらためて,Cassandra-Rubyを使ってデータをinsert.特に問題なさそうです.

require 'rubygems'
require 'cassandra'

client = Cassandra.new('MyKeyspace', 'server:9160')

client.insert(:Scores, "Dan", {"grade" => {"null" => "1"}})
client.insert(:Scores, "Dan", {"cource" => { "math" => "87"}})
client.insert(:Scores, "Dan", {"cource" => { "art" => "97"}})
client.insert(:Scores, "Dana", {"grade" => { "null" => "2"}})
client.insert(:Scores, "Dana", {"cource" => { "math" => "100"}})
client.insert(:Scores, "Dana", {"cource" => { "art" => "80"}})

結果を見てみる

さっきinsertしたデータをgetしてみる.

require 'rubygems'
require 'cassandra'

client = Cassandra.new('MyKeyspace', 'server:9160')

p client.get(:Scores, "Dan")
=> #<OrderedHash {"grade"=>#<OrderedHash {"null"=>"1"}>, "cource"=>#<OrderedHash {"math"=>"87", "art"=>"97"}>}>
p client.get(:Scores, "Dan", "grade")
=> #<OrderedHash {"null"=>"1"}>
p client.get(:Scores, "Dan", "cource", "math")
=> "87"
p client.count_columns(:Scores, "Dan")
=> 2
p client.count_columns(:Scores, "Dan", "cource")
=> 2


CLI経由でも見てみる.大丈夫そう.

get MyKeyspace.Scores['Dan'] 
=> (super_column=grade,
   (column=null, value=1, timestamp=1276610280816299))
=> (super_column=cource,
   (column=art, value=97, timestamp=1276610280832299)
   (column=math, value=87, timestamp=1276610280828299))
Returned 2 results.
get MyKeyspace.Scores['Dana']
=> (super_column=grade,
   (column=null, value=2, timestamp=1276610280832299))
=> (super_column=cource,
   (column=art, value=80, timestamp=1276610280844299)
   (column=math, value=100, timestamp=1276610280836299))
Returned 2 results.