################################################################################ # DSL ################################################################################ class Nodes < BDB::Model store "db/nodes" index :path, :stamp end n = Node['/cex1'] n.set(:) require 'bdb' db = BDB::Btree.open "db/nodes", nil, BDB::CREATE | BDB::TRUNCATE aux = BDB::Btree.open "db/nodes.stamp", nil, BDB::CREATE | BDB::TRUNCATE, "set_flags" => BDB::DUPSORT db.associate(aux) {|aux, k, v| Marshal.load(v).stamp} ################################################################################ x = 1_000_000 def r; rand(1_000_000_000); end ################################################################################ t1 = Time.now x.times do n = Node.new("/cex1/r#{r}", r, Time.now - r) db[n.path] = Marshal.dump(n) end t2 = Time.now e = t2 - t1 t_per_n = x / e puts "writing #{x} records took #{e} seconds. #{t_per_n} records per second." ################################################################################ t1 = Time.now x = 0 db.each do |k, v| Marshal.load(v).path x += 1 end t2 = Time.now e = t2 - t1 t_per_n = x / e puts "reading #{x} records took #{e} seconds. #{t_per_n} records per second." ################################################################################ t1 = Time.now x = 0 aux.each do |k, v| Marshal.load(v).path x += 1 end t2 = Time.now e = t2 - t1 t_per_n = x / e puts "sdb: reading #{x} records took #{e} seconds. #{t_per_n} records per second."