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
Était-ce utile?

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

Cela fonctionne pour moi :

require 'bdb'
db=BDB::Hash.open("test.db")
keyvalues=db.to_hash
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top