User Tools

Site Tools


skyline

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

skyline [2014/01/18 07:44] (current)
Line 1: Line 1:
 +====== 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構造体からも呼び出すことが可能になっている。
  
skyline.txt · Last modified: 2014/01/18 07:44 (external edit)