كيفية استرداد جميع السجلات من Berkeley DB في Ruby

StackOverflow https://stackoverflow.com/questions/577447

  •  05-09-2019
  •  | 
  •  

سؤال

أود أن أكون قادرا على الحصول على جميع القيم الرئيسية المخزنة في Berkeley DB باستخدام ارتباطات 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 لتشغيل مساحة المفتاح / القيمة بأكملها.

في بيركلي ديسيبل نفسه، سوف تخلق المؤشر ثم استخدامه مع 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top