2011-01-05 3 views
1

私は5つの異なるステップからなるバイオインフォマティクス解析プログラムを用意しています。各ステップは基本的に、入力を受け取り、魔法を行い、いくつかのテキストファイルを出力するperlスクリプトです。各ステップは、次の開始前に完全に終了する必要があります。コアi7コンピュータでは、プロセス全体が24時間程度かかります。一時データベースをパイプラインの中間ストアとして使用していますか?

大きな問題点の1つは、各ステップで後続のステップで必要となる約5〜10ギガバイトの中間出力テキストファイルが生成され、冗長性があることです。たとえば、ステップ1の出力はステップ2と3と4で使用され、それぞれには同じ前処理が行われます。この構造は、それぞれのステップが独立して開発された「有機的に」成長しました。メモリ上のすべてを行うことは、ディスク上の10ギガバイトのデータがperlハッシュ/アレイにロードされたデータが大きすぎてメモリに収まらないため、うまくいきません。

データを中間データベースにロードし、ステップで一度処理し、後続のすべての手順で使用できる場合は、いいでしょう。データは基本的にリレーショナル/表形式です。いくつかのステップではデータへのアクセスのみが必要ですが、他のステップではファイルへのランダムアクセスが必要です。

誰もこの種のことで何か経験がありますか?

どのデータベースがこのようなタスクに適していますか?私はSQLiteを使用して好きでしたが、20GB以上のサイズに拡張できますか? postgresqlまたはmysqlにメモリ内のデータを大量にキャッシュするように指示できますか? (私は、C/C++で書かれたデータベースはperlのハッシュ/配列よりもはるかに効率的なメモリであると考えているので、そのほとんどは24GBのマシンのメモリにキャッシュされている可能性があります)。また、RDBMSで20GB以上のデータを作成、索引付け、その後で破壊するオーバーヘッドを考慮すると、シングル・ラン・アナリシスの場合は、より良い非RDBMS関連のソリューションがありますか?

答えて

1

NoSQLデータベースのいくつかを見ましたか?彼らはあなたの仕事の種類に適しているようです。私はMongoDBをハイスループットアプリケーションに使用しました。

Here is a comparison of various nosql dbs

+0

はい、OTFの作成に適しています。そして、あなたのアプリケーションについて理解したことに基づいて、構造がリレーショナル/表形式で現れるのに対し、おそらく "ドキュメント"指向(スキーマフリー)構造になっています... – Mikos

関連する問題