문제

루비 바인딩을 사용하여 버클리 DB에 저장된 모든 키 값을 얻을 수 있기를 원합니다. http://github.com/mattbauer/bdb/tree/master 그러나 어떻게 진행 해야할지 잘 모르겠습니다. 모든 포인터에게 감사하겠습니다.

업데이트

다음은 키를 루프하고 인쇄하는 작은 스크립트입니다. 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
도움이 되었습니까?

해결책

버클리 DB의 커서를 사용하여 전체 키/값 공간을 통과해야합니다.

버클리 DB 자체에서는 커서를 만들고 다음과 함께 사용합니다. DB_FIRST 플래그에 이어 여러 번의 호출이 이어집니다 DB_NEXT 키/값 쌍이 부족할 때까지 플래그. 만 사용하여 코드를 단순화 할 수 있습니다 DB_NEXT 새로 생성 된 커서에게 그렇게한다면 사용하는 것과 동일합니다. DB_FIRST.

루비 바인딩으로, 이것은 (내 기준으로 매우 루비에 대한 기본적인 지식 - 이것을 청소할 수 있어야합니다) :

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top