MySQLデータベースに質量分析計からのスキャンを保存することを計画していますが、この量のデータの保存と分析がリモートで実行可能かどうかを知りたいです。パフォーマンスは環境によって大きく異なることがわかっていますが、大まかな順序を探しています:クエリには5日または5ミリ秒かかりますか?
入力形式
各入力ファイルには、分光器の単一の実行が含まれています。各実行は一連のスキャンで構成され、各スキャンには順序付けられたデータポイントの配列があります。少しのメタデータがありますが、ファイルの大部分は32ビットまたは64ビットのintまたはfloatの配列で構成されています。
ホストシステム
| ---------------- + ------------------------------- | | OS | Windows 2008 64ビット| | MySQLバージョン| 5.5.24(x86_64)| | CPU | Xeon E5420 x 2(合計8コア)| | RAM | 8GB | | SSDファイルシステム| 500 GiB | | HDD RAID | 12 TiB | | ---------------- + ------------------------------- |
無視できるプロセッサー時間を使用して、サーバーで実行されている他のサービスがいくつかあります。
ファイル統計
| ------------------ + -------------- || | ファイル数| 〜16,000 | | 合計サイズ| 1.3 TiB | | 最小サイズ| 0バイト| | 最大サイズ| 12 GiB | | 意味する| 800 MiB | | 中央値| 500 MiB | | 合計データポイント| 〜2,000億| | ------------------ + -------------- ||
データポイントの総数は非常に大まかな見積もりです。
提案されたスキーマ
私は物事を「正しく」行うことを計画しています(つまり、狂気のようにデータを正規化する)ので、runs
テーブル、spectra
外部キーto runs
を持つdatapoints
テーブル、および外部キーto を持つテーブルを持つことになりspectra
ます。
2,000億のデータポイントの質問
複数のスペクトル、場合によっては複数の実行にわたって分析し、数百万行に及ぶクエリを作成します。すべてを適切にインデックス付けし(別の質問のトピック)、ネットワーク全体で数百のMiBをシャッフルしようとしていないと仮定すると、MySQLがこれを処理することはリモートでもっともらしいですか?
追加情報
スキャンデータは、XMLベースのmzML形式のファイルから
取得されます。この形式の中核は
<binaryDataArrayList>
、データが保存される要素にあります。各スキャンは2つ以上の<binaryDataArray>
要素を生成し、これらを合わせて、フォームの2次元(またはそれ以上)の配列を形成し[[123.456, 234.567, ...], ...]
ます。
これらのデータは追記型なので、更新パフォーマンスとトランザクションの安全性は問題になりません。
データベーススキーマの私の素朴な計画は次のとおりです。
runs
テーブル
| 列名| タイプ| | ------------- + ------------- | | id | 主キー| | start_time | タイムスタンプ| | 名前| VARCHAR | | ------------- + ------------- |
spectra
テーブル
| 列名| タイプ| | ---------------- + ------------- | | id | 主キー| | 名前| VARCHAR | | インデックス| INT | | spectrum_type | INT | | 表現| INT | | run_id | 外国のキー| | ---------------- + ------------- |
datapoints
テーブル
| 列名| タイプ| | ------------- + ------------- | | id | 主キー| | spectrum_id | 外国のキー| | mz | ダブル| | num_counts | ダブル| | インデックス| INT | | ------------- + ------------- |
これは合理的ですか?
推測できるかもしれませんが、私は研究室の生物学者ではなくプログラマですから、科学についても実際の科学者についてもほとんど知りません。
以下は、扱うデータの種類の単一のスペクトル(スキャン)のプロットです。
ソフトウェアの目標は、ピークがどこでどの程度重要であるかを把握することです。現在、独自のソフトウェアパッケージを使用してこれを把握していますが、独自の分析プログラム(R)を作成して、シートの下で何が起こっているのかを把握したいと考えています。ご覧のとおり、データの大部分は興味のないものですが、アルゴリズムが見逃した潜在的に有用なデータを捨てたくありません。満足できる可能性のあるピークのリストを取得したら、パイプラインの残りの部分では、データポイントの生のリストではなく、そのピークリストを使用します。生のデータポイントを大きなblobとして保存すれば十分だと思うので、必要に応じて再分析できますが、ピークのみを個別のデータベースエントリとして保持します。その場合、スペクトルごとに数ダースのピークしかないので、クレイジーなスケーリングはすべきではありません。