루비의 버클리 DB에서 모든 레코드를 검색하는 방법
-
05-09-2019 - |
문제
루비 바인딩을 사용하여 버클리 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
제휴하지 않습니다 StackOverflow