2012-02-20 8 views
0

私たちは毎月大量のデータを収集し、さらに高度な計算を行い、データベースをさらに増やすシステムを持っています。私たちは3年前の高速アクセスのためにデータを保存する必要があり、古いデータ(最大10年)にアクセスできる必要があるという顧客の要件があるため、パフォーマンスが低く、作業が必要です。私たちは、データベースとそのテーブルが比例して大きくなるパフォーマンスの問題を避けたいと考えています。Nhibernateを複数のテーブルにわたってオブジェクトのパーティションで使用することは可能ですか?

私たちはノウハウを手に入れていないので、SQLエンタープライズを使用して議論したところ(おわかりではないので、非常に高価でトラップがたくさんありました)、システムには数多くのテーブルがあり、これは毎月の方法でデータを移動し、状況に応じて、通常の表または履歴のいずれかまたは両方を検索するためのパラメータに基づいて選択したクエリを書き換えます。

私たちはマッピングのためにNHibernateも使用しているので、これを扱うマッピングファイルを作成することができるかどうかは疑問でした。これは、ある種のポリモーフィズムや継承を使用して(ほとんど)各オブジェクトがパラメーター?

これは複雑で奇妙で、これを実行する他の方法があることはわかっていますが、私はこの質問に答える人に質問し、代わりに他の訴えをしないようにしたいと思います。

答えて

0

NHibernateはこれを行うことができません(各クラスは1つのテーブル/ビューにマップできます)が、SQLクエリやStoredProcedures(使用しているNHibernateのバージョンに依存します)を使用して、オブジェクト。 あなたのケースでは、異なるテーブルのユニオンを作成することによって作成された結合ビューを作成できます。次に、SQLクエリを使用してエンティティを作成できます。 また、そのビューを使用するクエリ用のサマリーオブジェクトを作成する別のソリューションがあります。したがって、このオブジェクトをクエリするためにHQLと基準の両方を使用できます。

+0

それぞれが異なるテーブルにマップされた同じベースクラスの2つのオブジェクトをマップし、実際にどのサブクラスを取得するかを指定するクエリを作成することができると考えていました。 –

+0

これは、2つの異なる型を持たなければならず、それぞれを個別に使用してデータを照会することを意味します。各レコードの場所を示す基本クラスの別の表を保持していない限り、 。 – Beatles1692

0

短い答え "いいえ"。私はたくさんの参加について言及していますが、私は意見を作成しません。

個人的には、私はサマリーテーブルを作成し、ステートレスセッションを使用してこれらに直接マップするか、クラス定義で少なくともmutable=falseを使用します。これらの要約表は、レポートのみの非正規化データと考えることができます。唯一の欠点は、履歴データが定期的に変更され、サマリーテーブルの変更が必要な場合です。過去のデータが変わらない場合、これは達成するのが簡単なはずです。

また、おそらく、現在のシステムのサイズに追加するのではなく、これらのサマリーテーブルを別のカタログに保存することになります。

私は恐れています。

関連する問題