2

我希望能够使用来自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
4

2 回答 2

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()
于 2009-02-26T05:46:34.543 回答
1

这对我有用

require 'bdb'
db=BDB::Hash.open("test.db")
keyvalues=db.to_hash
于 2010-03-21T10:57:20.267 回答