Ruby et BDB premiers pas

Je viens de me lancer ce soir dans l'exploration de BDb (Berkeley Database) en ruby. La documentation n'abonde pas, mes mes premiest tests sont follement prometteurs.

Sur la base des exemples fournis avec les module BDB deruby (/usr/local/share/examples/ruby18/bdb/basic.rb sur FreeBSD) j'ai modifié pour faire fonctionner le code ce qui donne ceci :

#!/usr/bin/ruby

require 'bdb'


db = BDB::Btree.open "./basic", nil, BDB::CREATE | BDB::TRUNCATE, 0644,
     "set_pagesize" => 1024, "set_cachesize" => [0, 32 * 1024, 0]
File.foreach("wordlist") do |line|
    line.chomp!
    db[line] = line.reverse
end
db.stat.each do |k, v|
    print "#{k}\t#{v}\n"
end
db.each do |k, v|
    if k != v.reverse
	print "ERROR : #{k} -- #{v}\n"
    #else
    #	print "#{k}\t#{v}\n"
    end
end
db.close

wordlist est un fichier texte contenant une liste de mots, avec un mot par ligne. L'exécution du code donne ceci :

%ruby basic.rb
bt_re_len       0
bt_ndata        10000
bt_magic        340322
bt_int_pg       18
bt_over_pg      0
bt_nkeys        10000
bt_leaf_pg      429
bt_int_pgfree   8244
bt_dup_pg       0
bt_version      9
bt_over_pgfree  0
bt_leaf_pgfree  129614
bt_pagesize     1024
bt_free 0
bt_nrecs        10000
bt_minkey       2
bt_re_pad        
bt_dup_pgfree   0
bt_levels       3

En sachant que

%wc -l wordlist 
   10000 wordlist

On en conclut que on à bien nos 10000 mots dans la base :) Il est possible de décommenter les deux lignes du else afin de voir apparaitre le contenu de la base.

Un lien intérésant pour en savoir plus sur BDB : http://www.oracle.com/technology/documentation/berkeley-db/db/index.html