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
exists?(key)

alias to has_key

Alias for: has_key?
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