Skip to content

Skyline

gaou edited this page Oct 21, 2020 · 1 revision

Skylineとは

概要

 version 1のコアはSubOptやMessengerを除けばG.pmのみという一枚岩の構造になっていた。データベースのIOはGenBank主体であり、その他についてはBioperlに依存していた。データベースを操作するための基本関数セットはゲノム解析に特化しており、他の分野のデータベースを導入するのは困難であった。このため、Skylineでは根本的に設計を練り直した。新しいアーキテクチャではG.pmはただのゲートウェイとして機能し、全Odyssey関数とプラグイン関数をロードし、Skylineコアからデータベースと基礎関数セットが提供される。以下にそれぞれを詳しく説明する。

 use Gをすると、Odysseyの全解析メソッドが、Perlのネイティブな関数として使用できる。この為、G.pmでは全Odysseyクラスを継承し、そのメソッドをExportする。この時各クラスのメンバ関数の名前は自動的に取得される。また、容易に拡張を可能にし、さらにOdysseyメソッド開発を促すため、ユーザはプラグインフォルダに自作のPerlモジュールを用意することができる。プラグインフォルダ内部のモジュールは全自動でG.pmによって継承されメンバメソッドはExportされる。こうすることでversion 1のようにコアに手を加えることなく自由に拡張が可能になる。

 データベース制御の全てはSkylineコアが担っており、G.pmはこのSkylineクラスを継承している。new G() とする時のnew関数は実はSkylineが持っており、オプション及びデータベースの判別を行う。そして、適切なデータベースパーサをG::IOクラスから呼び出しデータを構造体として格納する。その構造体にG::Preludeクラスから基礎関数をセットして返す。また、この時必要に応じてG::DBクラスのSDB, Bluebird, Boranchなどを呼び出し適宜メモリ効率をあげる。このように、入力のデータベースに対して適切なパーサと関数セットをSkylineが判別して提供するので、これらを拡張することであらゆるデータ型に対応することができる。よってSkylineコアを持つversion 2は単にGenome Analysis EnvironmentというよりはBioinformatics Environmentと呼ぶ方が適切かもしれない。

エキスパート向け説明

 G::DB::Boranchは、グローバルな変数保持機構である。通常関数内のデータはmy関数などにより関数内部にスコープが限定されていて、関数間でのデータ保持が難しい。一方、完全なオブジェクト志向設計のもとではグローバル変数は存在しないため、関数の受け渡しとしてしかデータを保持できない。この問題を解決するため、メモリ内データキャッシュとしてグローバルなスコープで特定データに参照を持たす機能をG::DB::Boranchは持っている。G::DB::Boranchに参照を保存すると、Perlは参照カウントが存在している限りそのメモリを解放しないので、データは保持される。そして参照が残っているので、常にグローバルなスコープからそのデータにアクセスすることもできる。

 G::DB::SDBは、Bluebirdと似た仕組みで、バイナリーファイルとしてメモリの内容を永続的に保持する機構である。Beowulf型のクラスタ環境では通常NFSが機能しているため、容量がそれほど多くないデータの永続・分散環境を構築するのに適している。

 Bioperlとの連携を強めるため、G::IO::BioperlIが存在し、常にG構造体とBioperlのSeq構造体と相互変換を可能にしている。この機能をSubOpt内部にも実装し、SubOptのopt_get関数では各入力がBioperl構造体であるかを判別した上で必要に応じてこれを自動的にG構造体に変換している。こうして全Odyssey関数はBioperl構造体からも呼び出すことが可能になっている。

Clone this wiki locally