かの有名なDB、gnomADでは、MongoDBが使われているそうです。
UIのレスポンスも早く、かっちょいいですね。
変異アノテーションデータを格納するDBとしてRDBとNoSQLを比較検討してみた論文があったので要約してみました。
Purpose
- 変異アノテーション情報を格納するのに最適なDBは何か
VCFに格納している変異・アノテーションをデータベースに格納することを考えたとき、最適なDBは何かを判断する。 - DBの性能評価をどのように行っているか
DBのパフォーマンスを評価する際にどのようなことを行っているか知る。- 対象DB
- 実行環境
- 入力データ
- 実行クエリ
Results
変異アノテーション情報を格納するのに最適なDBは何か
NoSQLを用いるのが良い。中でもドキュメント指向のNoSQLは柔軟なスキーマを持てる、インデックス作成を含めたデータ挿入パフォーマンスが高い、各種クエリの応答速度が高速といった点で変異アノテーション情報の格納に適している。DBの性能評価をどのように行っているか
- 対象DB
MySQL, PostgreSQL(RDB), PostgreSQL(JSONB), MongoDB - 実行環境
AWS EC2上で構築 - 入力データ
dbSNP build 139 をTSVに変換し、サブセットを作成したものを使用。
61,268,661SNP(MongoDBで約3.67GB) - 実行クエリ
各種クエリでパフォーマンスをテスト
- 対象DB
Summary of Summary
NoSQLはRDBと比較してクエリ応答速度、データストレージの両面において、より効率的なDBシステムを構築できることが期待される。動的スキーマを使用する機能と相まって、特にドキュメント指向のデータベースは大規模なゲノムデータセットの管理に適している。
Author
Schulz WL, Nelson BG, Felker DK, Durant TJS, Torres R.
Motivation
- 研究および臨床アプリケーションの両方で生成されるゲノムデータ・アノテーションの量が指数関数的に増加しているが、それを格納するDBの最適化が遅れている。
- RDBは通常のファイルを使用する場合よりストレージ効率とデータ取得速度の面で優れているため広く利用されている。
- データの肥大化につれ、商用のDBとしてはドキュメント指向のDBやその他のNoSQlが使用されてきている。
- 非構造化データや半構造化データのアーキテクチャが遺伝情報の保存に有用であるというエビデンスはほとんどなく、研究利用が遅れている。
- 変異のアノテーションデータのデータ構造はデータソースによって異なり動的に変化する必要があるため、ドキュメント指向のDBが最適。
- NoSQLは、書き込み操作のパフォーマンスが大幅に向上するだけでなく、一部のデータセットのクエリ効率を改善できるインメモリインデックスを使用できる点で、RDBと比べて利点が大きい。
Superiority
- 遺伝情報の格納というテーマでのDBのパフォーマンス比較
- そもそも当時類似の既存論文なし(?)
Discussion
- JSON形式で格納するようなデータをRDBに格納することもできるが、RDBへのデータ挿入は、関連するテーブルにデータを挿入する前に、トランザクションログに書き込む必要性と外部キー値のルックアップが含まれる。
- 外部テーブルが1つの場合のみを検証しているが、実際にはより多くの外部テーブルが含まれることになる。この時NoSQLに切り替える恩恵は大きくなると想定される。
- PostgreSQLにおいて、GINインデックスを使用するとインデックス作成は時間がかかるが、標準のBツリーインデックスよりも大幅に優れたクエリパフォーマンス結果となった。
- PostgreSQLのレコードの挿入時間は、MongoDBとほぼ同じであったが、レコードの挿入とインデックス付けに必要な合計時間を考慮すると、MongoDBのほうがより高いパフォーマンスを示した(MongoDB:66分、JSONBデータ型PostgreSQL:278分)。
- 検証したうちほとんど全てのクエリにおいて、MongoDBが最もパフォーマンスが高かった。MySQLは、各ケースで最も遅いクエリ効率を示した。
- MongoDBにはメモリ内にインデックスを保持することができる。また、PostgreSQLではJSONBデータ型の逆インデックスパターンが利用できる。RDBには、頻繁に使用されるインデックスをメモリにキャッシュする機能があるが、この効果はNoSQLの効率化に比べ効果が薄い。
- ドキュメント指向のDBは、クエリやストレージの効率性だけでなくデータ構造が柔軟であるという利点もある。DBを作成したのちにデータモデルの削除、変更、追加が容易。
Method of verification
同スペックのインスタンス上で
- インデックスの作成時間
- 結果数の異なるクエリ(RSID, 特定の遺伝子, 臨床的に重要か否か(Bool))の応答時間
を測定した。
Tools
- MongoDB (version 3.0.12)
- MySQL (version 5.5.46)
- PostgreSQL (version 9.4)
- pymongo (version 2.6.3)
- MySQLdb (version 1.2.4)
- psycopg2 (version 2.6.2)
オーバーヘッドをなくすため、
MySQLとPostreSQLでkey check無効、ログの取得を最小限とした。
MongoDBではJournalingを無効にした。
Contribution
NoSQLデータベースアーキテクチャを採用すると、ゲノムアノテーションのストレージ効率と検索効率が向上する可能性があることを示した。
Memo
使用率が低い場合かつ単一の同時実行環境でのパフォーマンスの比較に限定されている。
bulkにデータを入力する場合、RDBだと主キーを持つテーブルに最初にデータを追加したのち、関連するテーブルにデータを追加していく必要がある。一方NoSQLでは、そのような制約はないため、importの効率が高い。
主キーを作成する必要がないDB構成の場合、RDBとNoSQLのパフォーマンスの差はそこまで大きくないことが推測される。