class Noda::Table
スレッドセーフなHASHテーブルを作ってる
ジョブの共有ストレージ. 内部的にはHashにしている
KVSとして使う事を想定
require 'noda' server =Noda::JobServer.new table = server.hash_table #<= 自分でインスタンス化しない.Jobサーバーから使う table.put "key, "value"
タスクから使う場合。
do_task(hash_table) v = hash_table.get "key" hash_table.put "key", "value2" # =>更新 end
Attributes
name[R]
Public Class Methods
new(name=nil)
click to toggle source
# File lib/noda/table.rb, line 24 def initialize(name=nil) @hash = {} @name = name self.extend(MonitorMixin) @m_lock = self.new_cond @saved_keys = [] end
Public Instance Methods
each() { |k,v| ... }
click to toggle source
Enumerable 用。
drb 経由で呼び出す時は、参照渡しになるので注意
# File lib/noda/table.rb, line 52 def each @hash.each_pair{|k,v| yield( k,v[:data] ) } nil end
each_unsaved_pair() { |k, v| ... }
click to toggle source
テーブルの未保存の値をすべて取り出す.」
永続ストレージに書き出すときに このメソッドを使って処理が出来る
# File lib/noda/table.rb, line 77 def each_unsaved_pair @hash.each_pair{|k,v| next if v[:saved]; yield( k, v[:data] ) } nil end
get(key)
click to toggle source
キー対応した値を取り出す
# File lib/noda/table.rb, line 32 def get(key) @hash[key][:data] end
has_key?(key)
click to toggle source
キーがテーブルに存在するか
# File lib/noda/table.rb, line 42 def has_key?(key) @hash.has_key? key end
Also aliased as: exists?
has_unsaved_key?()
click to toggle source
未保存の値があるか
永続ストレージに書き出すときに このフラグを使って処理をする
# File lib/noda/table.rb, line 85 def has_unsaved_key? return true if @hash.find{|k,v| v[:saved]==false} return false end
keys()
click to toggle source
キーを全部取得
# File lib/noda/table.rb, line 46 def keys() @hash.keys end
put(key, obj)
click to toggle source
キーを名前に値を保存する.
# File lib/noda/table.rb, line 36 def put(key, obj) self.synchronize{ @hash[key] = {:data=>obj,:saved=>false} } end
saved?(key)
click to toggle source
テーブルの値はDump済みかどうか
永続ストレージに書き出すときに このフラグを使って処理をする
# File lib/noda/table.rb, line 61 def saved?(key) @hash[key][:saved] end
size()
click to toggle source
テーブルの値の数
# File lib/noda/table.rb, line 48 def size() @hash.size end
update_saved_at(key,status=true)
click to toggle source
テーブルの値の保存状態を更新する.
永続ストレージに書き出すときに このフラグを使って処理をする
# File lib/noda/table.rb, line 68 def update_saved_at(key,status=true) self.synchronize{ @hash[key][:saved]=status } end