class Yoda::Store::Adapters::LmdbAdapter
Public Class Methods
for(path)
click to toggle source
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 9 def for(path) @pool ||= {} @pool[path] || (@pool[path] = new(path)) end
new(path)
click to toggle source
@param path [String] represents the path to store db.
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 20 def initialize(path) Dir.mkdir(path) unless Dir.exist?(path) @path = path @env = LMDB.new(path) @db = @env.database('main', create: true) at_exit { @env.close } end
type()
click to toggle source
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 14 def type :lmdb end
Public Instance Methods
batch_write(data, bar)
click to toggle source
@param data [Enumerator<(String, Object)>] @param bar [#increment, nil]
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 37 def batch_write(data, bar) env = LMDB.new(@path, mapsize: @env.info[:mapsize], writemap: true, mapasync: true, nosync: true) db = env.database('main', create: true) data.each do |(k, v)| begin db.put(k.to_s, v.to_json) rescue LMDB::Error::MAP_FULL => _ex @env.mapsize = @env.info[:mapsize] * 2 env.close env = LMDB.new(@path, mapsize: @env.info[:mapsize], writemap: true, mapasync: true, nosync: true) db = env.database('main', create: true) db.put(k.to_s, v.to_json) end bar&.increment end env.close end
clear()
click to toggle source
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 85 def clear @db.clear end
delete(address)
click to toggle source
@param address [String] @return [void]
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 64 def delete(address) @db.delete(address.to_s) end
exist?(address)
click to toggle source
@param address [String] @return [true, false]
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 70 def exist?(address) !!@db.get(address.to_s) end
get(address)
click to toggle source
@param address [String] @return [any]
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 31 def get(address) JSON.load(@db.get(address.to_s), symbolize_names: true) end
keys()
click to toggle source
@return [Array<String>]
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 75 def keys Enumerator.new do |yielder| @db.each { |(k, v)| yielder << k } end.to_a end
put(address, object)
click to toggle source
@param address [String] @param object [Object] @return [void]
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 58 def put(address, object) do_put(address.to_s, object.to_json) end
stats()
click to toggle source
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 81 def stats @db.stat end
sync()
click to toggle source
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 89 def sync # @env.sync(force: true) end
Private Instance Methods
do_put(address, value)
click to toggle source
@param address [String] @param value [String] @return [void]
# File lib/yoda/store/adapters/lmdb_adapter.rb, line 98 def do_put(address, value) LMDB.new(@path, mapsize: @env.info[:mapsize]) do |env| db = env.database('main', create: true) db.put(address, value) end rescue LMDB::Error::MAP_FULL => _ex @env.mapsize = @env.info[:mapsize] * 2 LMDB.new(@path, mapsize: @env.info[:mapsize]) do |env| db = env.database('main', create: true) db.put(address, value) end end