Class: Yoda::Store::Adapters::LmdbAdapter
- Defined in:
- lib/yoda/store/adapters/lmdb_adapter.rb
Class Method Summary collapse
Instance Method Summary collapse
- #batch_write(data, bar) ⇒ Object
- #clear ⇒ Object
- #delete(address) ⇒ void
- #exist?(address) ⇒ true, false
- #get(address) ⇒ any
-
#initialize(path) ⇒ LmdbAdapter
constructor
A new instance of LmdbAdapter.
- #keys ⇒ Array<String>
- #put(address, object) ⇒ void
- #stats ⇒ Object
- #sync ⇒ Object
Constructor Details
#initialize(path) ⇒ LmdbAdapter
Returns a new instance of LmdbAdapter.
20 21 22 23 24 25 26 27 |
# 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 |
Class Method Details
.for(path) ⇒ Object
9 10 11 12 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 9 def for(path) @pool ||= {} @pool[path] || (@pool[path] = new(path)) end |
.type ⇒ Object
14 15 16 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 14 def type :lmdb end |
Instance Method Details
#batch_write(data, bar) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 37 def batch_write(data, ) 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 &.increment end env.close end |
#clear ⇒ Object
85 86 87 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 85 def clear @db.clear end |
#delete(address) ⇒ void
This method returns an undefined value.
64 65 66 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 64 def delete(address) @db.delete(address.to_s) end |
#exist?(address) ⇒ true, false
70 71 72 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 70 def exist?(address) !!@db.get(address.to_s) end |
#get(address) ⇒ any
31 32 33 |
# 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 ⇒ Array<String>
75 76 77 78 79 |
# 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) ⇒ void
This method returns an undefined value.
58 59 60 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 58 def put(address, object) do_put(address.to_s, object.to_json) end |
#stats ⇒ Object
81 82 83 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 81 def stats @db.stat end |
#sync ⇒ Object
89 90 91 |
# File 'lib/yoda/store/adapters/lmdb_adapter.rb', line 89 def sync # @env.sync(force: true) end |