我希望能够使用来自http://github.com/mattbauer/bdb/tree/master的Ruby绑定来获取存储在Berkeley DB中的所有键值,但我不确定如何继续。任何指针都将受到赞赏。
更新
这是一个小的脚本,它循环遍历键并打印它们。基于Pax的回答:
require 'rubygems'
require 'bdb'
env = Bdb::Env.new(0)
env.open('foo', Bdb::DB_CREATE,0)
db = env.db
db.open(nil, 'db1.db', nil, Bdb::Db::BTREE, Bdb::DB_CREATE,0)
db.put(nil, 'key', 'value', 0)
db.put(nil, 'key1', 'value1', 0)
db.put(nil, 'key2', 'value2', 0)
dbc = db.cursor(nil,0)
key,val = dbc.get(nil,nil,Bdb::DB_FIRST)
while key
p key,val
key,val = dbc.get(nil,nil,Bdb::DB_NEXT)
end
dbc.close
db.close(0)
env.close
答案 0 :(得分:2)
您需要在Berkeley DB中使用游标来运行整个键/值空间。
在Berkeley DB本身中,您将创建一个游标,然后将其与DB_FIRST
标志一起使用,然后使用DB_NEXT
标志进行多次调用,直到您用完键/值对。您可以仅使用DB_NEXT
来简化代码,因为如果您对新创建的游标执行此操作,则与使用DB_FIRST
相同。
使用Ruby绑定,这似乎是完成的(基于我非常对Ruby的基本知识 - 你应该能够清理它):
dbc = db.cursor(nil,0)
key,val = dbc.get(nil,nil,Bdb::DB_FIRST)
while key != nil do
# Process key and val as needed.
key,val = dbc.get(nil,nil,Bdb::DB_NEXT)
# or possibly .. (key,val,Bdb::DB_NEXT)
end
dbc.close()
答案 1 :(得分:1)
require 'bdb'
db=BDB::Hash.open("test.db")
keyvalues=db.to_hash