Skip to content

Instantly share code, notes, and snippets.

@lusis
Created August 29, 2011 19:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lusis/386ff22215cc426b97b9 to your computer and use it in GitHub Desktop.
Save lusis/386ff22215cc426b97b9 to your computer and use it in GitHub Desktop.
lame ruby kv store
require 'msgpack'
module RubyKV
class Data
attr_reader :data_dir, :name
def initialize(name, data_dir)
@name = name
@data_dir = data_dir
@store = {}
end
def get(key)
@store[key]
end
def set(key, value)
if @store.has_key?(key)
puts "Overwritting existing key: #{key}"
end
@store[key] = value
end
def delete(key)
@store.delete key
end
def keys
@store.keys
end
def save
begin
File.open("#{@data_dir}/#{@name}.mpk", 'w'){|f| f.write(@store.to_msgpack) }
puts "Database saved!"
rescue Exception => e
puts "Error saving database: #{e}"
end
end
def load
begin
data = File.open("#{@data_dir}/#{@name}.mpk", 'r')
@store = MessagePack.unpack data.read
data.close
puts "Database loaded"
rescue Exception => e
puts "Error loading database: #{e}"
end
end
end
end
# @foo = RubyKV::Data.new "mystore", "/tmp/"
# 1000.times do |n|
# @foo.set "key_#{n}", "data_#{n}"
# end
# @foo.save
# @foo = RubyKV::Data.new "mystore", "/tmp/"
# @foo
# @foo.load
# @foo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment