Pregunta

Me gustaría ser capaz de obtener todos los valores clave almacenados en una base de datos Berkeley utilizando los enlaces de Rubí http://github.com/mattbauer/bdb/tree/master pero no estoy seguro de cómo proceder. será apreciado Cualquier punteros.

Actualizar

Aquí hay un pequeño script que los bucles de las llaves y los imprime. Sobre la base de la respuesta 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
¿Fue útil?

Solución

Es necesario utilizar los cursores en Berkeley DB para funcionar a través de todo el espacio de clave / valor.

En la propia base de datos Berkeley, debe crear un cursor luego usarlo con la bandera DB_FIRST seguido de múltiples invocaciones con la bandera DB_NEXT hasta que se acabe de pares clave / valor. Se puede simplificar el código utilizando sólo DB_NEXT ya que, si lo hace a un cursor de nueva creación, que es lo mismo que usar DB_FIRST.

Con los enlaces de Ruby, esto parece ser hecho con (basado en mi muy conocimiento rudimentario de Ruby - usted debe ser capaz de limpiar esto):

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

Otros consejos

Esto funciona para mí :

require 'bdb'
db=BDB::Hash.open("test.db")
keyvalues=db.to_hash
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top