リレーショナル データを MongoDB に保存する必要がありますか?
私のユニークな状況(以下に概説)を考えると、どんな洞察も大歓迎です!! 他のプロジェクトと同様に、私のリソースは非常に限られています。できるだけ低コストでパフォーマンスを向上させたいと考えています。:)
バックグラウンド
- 拡張的で複雑なデータ モデルを使用するプロジェクトに取り組んでいます。
- 84 のプライマリ テーブル
- セカンダリ テーブルへの 44 のビュー
- メイン項目タイプの 600k インスタンス
- 600k のメイン項目をサポートする 500,000,000 以上のタプル
- モデルは適切に正規化されており、よく考えられています。
- 多くのアイテムは、パフォーマンスのために非正規化されています。
- 私たちのデータ アクセス レイヤーは、ORM に Hibernate を使用します。
問題文
Hibernate は、84 個のテーブルと 44 個のビューを結合して、プライマリ データ項目を一緒にマップします (プライマリ データ項目を THEObject と呼びます)。この構成は非常にコストがかかります (単一の Oracle db ノード)。THEObject とその子を組み立てるのに数分かかる場合があります。
THEObject のインスタンス間で共有されるデータはほとんどありません。共有されるデータは、主に読み取り専用です (ユーザー データ、一般的な構成への参照など)。
THEObject の保存も非常にコストがかかります。
サイド プロジェクトとして、THEObject のデータを表す一連の Bean を作成し、THEObject の高価なインスタンスからデータを Bean にコピーし、xstream を使用して Bean を XML にシリアル化しました。THEObject から Bean への変換、Bean のシリアル化、および Bean を表す XML の保存にかかった時間は、わずか 26 ミリ秒でした。(リレーショナル表現で休止状態を使用して THEObject を保存するのに必要な 6 分にはほど遠い)。うーん
私が使用するデータには 3 つの主要なチャンク タイプ (コレクションを考える) があり、THEObject を表すチャンクは他の 2 つの主要なチャンクからのデータを共有しますが、共有しないため、アプリケーションはドキュメント ベースのデータベースによってより適切に処理されると思います。 THEObject の他のインスタンスの中にある独自のデータ。これにより、正規化されたストレージに関連する結合やパフォーマンスの低下なしに、アイテム全体として THEObject を読み取ることができます。
実際にはリレーショナル データであるにもかかわらず、ドキュメント ベースのデータベースにデータを格納することは合理的でしょうか?!
関連する読書