如何检索从Berkeley DB的Ruby中的所有记录
-
05-09-2019 - |
题
我希望能够得到所有使用Ruby的绑定的 http://github.com/mattbauer/bdb/tree/master ,但我不知道如何着手。任何指针将不胜感激。
<强>更新强>
下面是一个小脚本,遍历键和打印它们。基于大同”回答:
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
解决方案
您需要使用Berkeley DB的游标在整个键/值空间来运行。
在Berkeley DB的本身,可以创建一个光标然后与DB_FIRST
标志接着用DB_NEXT
标志多次调用,直到用完的键/值对使用它。你可以只用DB_NEXT
因为简化代码,如果你这样做,以新创建的指针,它是与使用DB_FIRST
。
随着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()
其他提示
require 'bdb'
db=BDB::Hash.open("test.db")
keyvalues=db.to_hash
不隶属于 StackOverflow