2009-04-18
Tokyo Dystopia で検索機能をつくる(1)
ゲノムデータベースの検索機能に全文検索エンジン Tokyo Dystopia をつかってみようと思います。
CyanoBase 改め GenomeDB の検索機能は MySQL の LIKE 検索で行っています。データをMySQLにだけおいておけば良い構成にできるので、ポータブルになるという利点があります。データが少ないうちはそれでよかったのですが、blast_hits のデータをくわえると、検索に10秒くらいかかるようになってしまいました。おそ過ぎて困りました。クリックして表示が終わるまでせめて2秒くらいにおさえたいです。しかたないので、検索範囲を限って運用しています。
しかし、必要な検索対象データの規模は遺伝子の数の定数倍ある各種アノテーションと定数倍より多い相同性検索結果です。いまのところおよそ50バクテリアで20万遺伝子をあつかっています。オーソログのデータを追加する場合、30(バクテリア) x 4000(遺伝子)x 29(バクテリア)が増加することになります。高速な検索方法を検討する必要があります。
KEGG Rails のように SuffixArray を利用するということもできますが、導入にやや敷居が高そうなかんじがしたので躊躇していたところ、Tokyo Dystopia が簡単に導入できそうなので試してみました。
Tokyo Dystopia の利用
インストールは、moved のインストラクションで問題無くできました。
全文検索エンジン Tokyo Dystopia に http://genome.kazusa.or.jp の新しい検索用データをいれてみました。テキストで 204MBくらい。およそ200万レコード。カラムはシリアル、gene_id、テキスト、カテゴリID。適当です。
$ du -sh a.tsv 204M a.tsv $ wc -l a.tsv 2236829 a.tsv $ head a.tsv 1 1 solanesyl diphosphate synthase 1 2 2 probable pseudouridine synthase 1 3 3 hypothetical protein 1 4 4 hypothetical protein YCF53 1 5 5 hypothetical protein YCF59 1 6 6 GDP-fucose synthetase 1 7 7 GDP-mannose 4,6-dehydratase 1 8 8 photosystem II D1 protein 1 9 9 arginine decarboxylase 1 10 10 DNA ligase 1
データのインポートに4分くらい。インデクスは1.3GBほど。マシンは MacBook Pro 2.93GHz/4GB/128GB SSD。
$ dystmgr create genome $ time dystmgr importtsv genome a.tsv ... dystmgr importtsv genome a.tsv 43.51s user 66.94s system 44% cpu 4:08.86 total $ du -sh genome 1.3G genome
検索してみる。0.14秒で帰って来た。はやい。
$ dystmgr search -pv -ph genome ABC hits: 47179 time: 0.146024 12 12 ABC-type iron(III) dicitrate transport system permease protein 1 13 13 ABC-type iron(III) dicitrate transport system permease protein 1 20 20 iron(III) dicitrate-binding protein of ABC transporter, FecB homolog 1 29 29 multidrug resistance family ABC transporter 1 35 35 MDR (multidrug resistance) family ABC transporter 1 51 51 ATP-binding protein of ABC transporter 1 143 143 amino-acid ABC transporter binding protein 1 147 147 ATP-binding protein of ABC transporter 1 335 335 ABC transporter, permease component 1 339 339 probable polysaccharide ABC transporter ATP binding subunit 1
まとめ
- 全文検索エンジン Tokyo Dystopia にゲノムデータベースのデータをいれてみた。
- 204MB 200万レコードのデータで 1.3GB のインデクスが4分くらいで作成できた。
- 検索は十分高速。
