TL、DR
大量の階層構造データを保存するための科学コンピューティング界で受け入れられているベストプラクティスは何ですか?たとえば、SQLは大きなスパース行列ではうまく機能しません。この種のデータを構造化し、保管し、分析するための優れたツールはありますか?LHCのスタッフは何を使用していますか?
ユースケースの詳細
次の階層に従ってタンパク質シミュレーションのデータを保存します。
protein
|__simulation conditions
|____|__residues
|____|____|__conformers
|____|____|____|__atoms
すべてのタンパク質はその各残基を認識している必要があり、すべての原子はそのシミュレーションなどに使用される条件を知っている必要があります。
もともと、このアプリケーションにはリレーショナルデータベースが最適であると考えたため、pythonとsqlalchemeyを使用して、SQLデータベースにデータを保存するプログラムを作成しました。ただし、実際には、このプログラムはあまりうまく機能していません。
最大の問題は、配座異性体データレベルにN x N行列があり、配座異性体のすべての可能なペア間のペアワイズ相互作用によるポテンシャルエネルギーを格納するという事実に関連しています。マトリックス内のエントリのほとんどはゼロです。そのため、データベース内の別のテーブルに、エントリごとに1行、一種のスパース形式でマトリックスを格納しています。残念ながら、数千の配座異性体を含むシミュレーションの場合、ペアワイズテーブルは依然として数十万行になり、次のようになります。
a)構築とクエリが非常に遅い(時間)
b)非スパースマトリックスとしてのデータの同等のプレーンテキスト表現よりもハードドライブ上のスペースを1桁多く
消費するc)10ギガバイト以上のメモリを消費するテーブルはメモリに読み込まれます
私の最終的な目標は、データベースに数万の実行(数十のシミュレーション条件下での数千のタンパク質から派生)を保存して、それらをすべて一緒に分析できるようにすることです。これは、ペアワイズ行列を表すテーブルが約10億行になる可能性が高いことを意味します。現在、このデータベースで単一のクエリを実行するためにも、Crayまたはその他の共有メモリモンスターが必要になるようです。
ここにはより良いオプションがありますか?LHCのスタッフは何を使用していますか?