J'utilise l'interface Ruby C officielle de Ruby et je ne suis pas capable de travailler en bzip. Il a fait construire avec le soutien bzip, ./configure dit:L'interface Ruby C de TokyoCabinet ne peut pas bzip
checking bzlib.h usability... yes
checking bzlib.h presence... yes
checking for bzlib.h... yes
J'ai donc écrit cet exemple programme qui écrit juste une entrée à deux fichiers, un soi-disant bzip'd et un non. Aucun n'est compressé; Mis à part le simple test de taille de fichier à la fin, je peux éditer le fichier with_bzip.tcb et voir le texte de la chaîne brute ici.
require 'tokyocabinet'
include TokyoCabinet
def write filename, options
File.unlink filename if File.exists? filename
bdb = BDB::new
bdb.tune(0, 0, 0, -1 -1, options) or raise "Couldn't tune"
bdb.open(filename, BDB::OWRITER | BDB::OCREAT | BDB::OLCKNB) or raise "Couldn't open"
bdb["test"] = "This string should be compressed and not appear raw.\n" * 10000
bdb.close
end
write 'without_bzip.tcb', 0
write 'with_bzip.tcb', BDB::TBZIP
puts "Not actually compressed" unless File.size('with_bzip.tcb') < File.size('without_bzip.tcb')
Ce qui fait pire est que si je tente une version préliminaire de l'Oklahoma Mixer (exemple suivant - bien que je n'ai pas la réputation d'ajouter la nouvelle balise), il compresse bien. Quand j'ai glissé un peu de débogage dans son appel try(), il semble faire le même appel pour accorder (0, 0, 0, -1, -1, 4). Je suis complètement perplexe - quelqu'un peut-il me dire ce que mon code ci-dessus fait mal?
require 'oklahoma_mixer'
OklahomaMixer.open("minimal_om.tcb", :opts => 'lb') do |db|
db["test"] = "This string should be compressed and not appear raw.\n" * 10000
end