Comment récupérer tous les enregistrements d'un Berkeley DB en Ruby
-
05-09-2019 - |
Question
Je voudrais être en mesure d'obtenir toutes les valeurs-clés stockées dans un Berkeley DB en utilisant les liaisons Ruby http://github.com/mattbauer/bdb/tree/master mais je ne suis pas sûr de savoir comment procéder. Tous les pointeurs seront appréciés.
UPDATE
Voici un petit script qui passe en boucle sur les touches et les imprime. Sur la base de réponse « 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
La solution
Vous devez utiliser les curseurs de Berkeley DB pour exécuter à travers l'ensemble de l'espace clé / valeur.
Berkeley DB lui-même, vous devez créer un curseur puis utilisez avec le drapeau DB_FIRST
suivi par plusieurs invocations avec le drapeau DB_NEXT
jusqu'à ce que vous manquez de paires clé / valeur. Vous pouvez simplifier le code en utilisant uniquement DB_NEXT
puisque, si vous le faites à un curseur nouvellement créé, il est le même que l'utilisation DB_FIRST
.
Avec les liaisons Ruby, cela semble être fait avec (en fonction de mon très connaissance rudimentaire de Ruby - vous devriez être en mesure de nettoyer cette place):
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()
Autres conseils
require 'bdb'
db=BDB::Hash.open("test.db")
keyvalues=db.to_hash