Как извлечь все записи из базы данных Berkeley в Ruby
-
05-09-2019 - |
Вопрос
Я хотел бы иметь возможность получить все ключевые значения, хранящиеся в базе данных Berkeley, используя привязки Ruby из http://github.com/mattbauer/bdb/tree/master но я не уверен, как поступить дальше.Любые указания будут оценены по достоинству.
Обновить
Вот небольшой скрипт, который перебирает ключи и печатает их.Основываясь на ответе Пакса:
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
Решение
Вам нужно использовать курсоры в 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()
Другие советы
require 'bdb'
db=BDB::Hash.open("test.db")
keyvalues=db.to_hash