2011-10-29 4 views
0

最近、低速のグリッド負荷でパフォーマンスの問題をトラブルシューティングする必要がありました。調査の結果、誰かがList<Product>を使ってグリッドにデータを入力したように見えました。問題は、Productオブジェクトに多くのプロパティがあり、多くはグリッドに必要なものではなく、ほとんどが.lazyloads()ではないということでした。Hibernateアーキテクチャのベストプラクティス

問題を解決するために、ProductLiteという新しいオブジェクトを作成しました。これには負荷が掛かりませんでした。ほとんどのキー情報とパフォーマンスはすぐれていました。 10,000 dbヒットするのではなく、1になりました。

あなたのオブジェクトをどのようにモデリングしていますか?時には集中的なオブジェクトの読み込みが必要なので、すべてのオブジェクトに「詳細」と「情報」のバージョンが必要であると私は考えていました。つまりProductDetails ProductInfoは単にリストで使用するための高レベルの情報を運ぶのに対しは、すべての情報を含んでいるでしょうし、リストで使用されていない、迅速な検索など

は最高として採用されている標準はありますオブジェクトのモデリングのための実践?

+0

関連する質問:http://stackoverflow.com/questions/2435111/using-lite-エンティティのバージョンnhibernate - 関係 –

+0

ハハ、エイリアン、それはほとんど正確ですが、私が見逃して申し訳ありません。私はこの闘いで一人ではないと聞いてよかったです。 :) –

答えて

4

ここでの問題は、Domain ModelオブジェクトとDTO/Presentation Modelオブジェクトを混同してしまうことです。

私は任意の指針「ベストプラクティス」を検討することは通常は消極的だが、ここではいくつかの一般的なヒントです:

  • ドメインオブジェクトは、テーブルごとに1(継承を考慮しない)
  • 遅延読み込みする必要がありますマッピングで無効にしないでください。 Good article about this
  • 使用エンティティとコレクションのための合理的なbatch-size設定(経験則:あなたのページサイズを使用)
  • 使用キャッシング、少なくとも大部分は、読み取り専用のため
  • 使用の予測(匿名、入力された、オブジェクト配列、どんなオブジェクトオブジェクトを編集する必要がないときに、実際に多くのオブジェクトのいくつかのフィールドをロードする必要がある場合はどうすればいいですか?
+0

ワウディエゴ、私は考慮しなかったあなたのヒントのカップル、提案のおかげで。これらの素晴らしいガイドラインを聞いてよかったです... –

関連する問題