2009-02-23 79 views
2

我希望能夠使用來自http://github.com/mattbauer/bdb/tree/master的Ruby綁定來獲取存儲在Berkeley DB中的所有鍵值,但我不知道如何繼續。任何指針將不勝感激。如何從Ruby中的伯克利數據庫檢索所有記錄

UPDATE

這裏有一個小腳本,遍歷鍵和打印它們。基於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 

回答

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() 
1

This works for me

require 'bdb' 
db=BDB::Hash.open("test.db") 
keyvalues=db.to_hash 
相關問題