Kazuharu Arakawa
gaou****@sfc*****
2007年 9月 8日 (土) 08:49:21 JST
g. 1.7.3リリースしました。多分結構不安定です。 BluebirdとOrochiを統合して、G::DB::BDB, G::DB::BDBIという名前の クラスを実装しました。BluebirdとOrochiの実装はとりあえず一段落、 という感じです。Bluebirdに関して詳しくは以下をご覧ください。 http://www.g-language.org/data/www.g-language.org/moin/moin.cgi/Bluebird_a4_c8_a4_cf 感覚的には、オブジェクト指向を敢えて使っていないActiveRecordパターン、 あるいはO/Rマッパーのようなもの、だと考えてもらっていいと思います。 アーキテクチャの変更としては、SQLiteをバックエンドに使うように なっています。 データベースのインストール、設定、などなど、面倒な作業は 一切不要です。db_saveとdb_loadがほぼsdb_save, sdb_loadと 同じように動くと思ってもらっていいです。 例えば、 $gb = new G("ecoli"); db_save($gb, "ecoli"); $gb = db_load("ecoli"); これだけで、二回目に読み込まれた$gbはBluebird型になっています。 全ての$gbの中でのメモリアクセスは、実メモリではなくデータベースに 向きます。 実メモリに取り込むには、 $gb = db_load("ecoli", "clone"); とします。 無限に深い多次元ハッシュを格納できます。もちろん、Gの構造体で ある必要は全くなく、むしろそうでない方が適しているはずです。 また、外部のデータベース、例えばEnsemblなんかも、普通に メモリで扱うのと同じように、構造体で扱えます。ダウンロードは せずに、あくまで構造体のポインタが外部データベースに飛ぶ 構造になっています。 例えば: $db = db_load("gene", -driver=>"mysql", -database=>"mus_musculus_core_46_36g", -host=>"ensembldb.ensembl.org", -port=>3306, -primarykey=>"gene_id"); say $db->{239967}->{status}; ある程度はキャッシングをしているので、今の段階でもそれなりに 高速です。(保存は時間がかかります) 基本的にこれからパフォーマンス向上やインタフェース改良しますので、 まだ仕様が変わる可能性があります。なので、ドキュメントはその辺が 確定次第追加します。 Changelogは以下の通り。 ===== v.1.7.3 2007.09.08 ===== *p, say, puts are moved to G::Messenger (from G::Shell::Log) and are exported by default. *fixed line-break bug for $gb->output() (in G::IO::GenBankO) introduced by the 1.7.2 update. *made $gb->cds() depend on $gb->feature() *G::DB::BDB (codename: Bluebird and Orochi) implemented. Something like following works now:) $db = db_load("gene", -driver=>"mysql", -database=>"mus_musculus_core_46_36g", -host=>"ensembldb.ensembl.org", -port=>3306, -primarykey=>"gene_id"); say $db->{239967}->{status}; exported methods are: db_dbi db_exists db_path db_set_path db_save db_load most work just like sdb in G::DB::SDB. *G::DB::GDBI, G::DB::GDBAPI (previous versions of Orochi) are removed.