2

http://github.com/mattbauer/bdb/tree/masterからRubyバインディングを使用してBerkeleyDBに格納されているすべてのキー値を取得できるようにしたいのですが、続行する方法がわかりません。任意のポインタをいただければ幸いです。

アップデート

これは、キーをループして印刷する小さなスクリプトです。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 に答える