昨日に続き、Perlについて。
ゲノムDNAの多型のうち、一塩基の多型をSNP(Single Nucleotide Polymorphism)といいます。
SNPについての詳細はネットで検索していただくとして、SNP情報は、米国NCBIのdbSNPの情報を利用しています。
dbSNPのサマリーによりますと、人のSNPは約1200万カ所余りが報告されています。
で、その情報はダウンロード可能な形で公開されているのですが、そのファイルサイズは膨大です。
公開ファイルの内、SNPの付随情報が全て含まれているXMLファイルを利用するのですが、染色体別に圧縮されたファイルは最大で約1GBもあります。展開すると約10GBです。
前置きが長くなりましたが、
比較的小さい(展開時で3GB弱)染色体19番のXMLファイルから情報を抽出するのに、
速度に定評のあるXML::LibXMLモジュールを利用したところ、メモリオーバーでプロセスが途中で死んでしまいました。
ちなみに、dbSNPのXMLファイルを手動で小さく加工したら(30 SNPsほど))正常に動作するので、
プログラム自体のミスではないとおもいます。
XML::LibXMLモジュールはDOMモデルなので、XMLファイル全体を一端メモリに読み込んでから処理します。
ランダムアクセスができて便利な反面、非常にメモリ容量を消費します。
サーバーは4GBメモリを積んだx86_64版のCentOS 5.3なのですが、駄目でした。
比較的小さなXMLファイルでも駄目なので、この手法では全ての染色体からはSNP情報を抽出できません。
(つづく)
コメント