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