データベースレイヤーを設計する方法についていくつかの入力が必要です。私のアプリケーションでデータベース、リクエスト、パフォーマンス、キャッシュ
私はT内の情報は、複数のデータベーステーブルからの情報を持っているT.のリストを持っています。
はもちろん、これを行うために複数の方法があります。 私が考える二つの方法である:私は上記を参照の問題は、我々は500項目のリストをしたい場合は、それが潜在的に可能性があることです
List<SomeX> list = new List<SomeX>();
foreach(...) {
list.Add(new SomeX() {
prop1 = dataRow["someId1"],
prop2 = GetSomeValueFromCacheOrDb(dataRow["someId2"])
});
}
:
おしゃべりデータベース層とキャッシュ可能500データベース要求を作成します。すべてのネットワークの待ち時間とそのこと。 もう1つの問題は、データベースからリストを取得した後で、キャッシュ/ dbから取得しようとする前にユーザーが削除されている可能性があるということです。つまり、nullの問題が発生します。これは手動で処理する必要があります。 良いことは、キャッシュ可能性が高いことです。
キャッシュ可能でないおしゃべりではなく:
List<SomeX> list = new List<SomeX>();
foreach(...) {
list.Add(new SomeX() {
prop1 = dataRow["someId1"],
prop2 = dataRow["someValue"]
});
}
潜在的にすべてのユーザーが独自のリストを持っているので、私は上記を参照の問題は、そのハードをキャッシュするようにということです。もう1つの問題は、データベースに対して多くの読み込みが発生する可能性のある多数の結合であることです。 良いことは、クエリが実行された後、我々は
非のでおしゃべり、それでもキャッシュ可能
第三の選択肢は、を介して第1のループにすることができた(内部はなど参加)すべての情報が存在することを確実に知ることです必要なsomeId2をすべて収集し、さらにもう1つのデータベース要求を行って、すべてのSomeId2値を取得します。
O/RMホイールを再発明しようとしている理由はありますか?この問題は、Entity Framework、NHibernateおよび他の多くのプロジェクトによって解決されています。 – Bergius
O/Rマッパーの長所と短所があります。また、ストアドプロシージャだけを使用してサイトを実行する場合は、問題/疑問が存在します。 – Patrik
データがテーブル内でどのように構造化されているかについていくつか詳しく説明できますか?私はsomeId1がユーザーIDを表し、someValueはそのユーザーのプロパティ(?)を表し、それらのプロパティは異なるテーブルに格納されていると推測しています。あなたの答えに応じて、いくつかのテーブルを再設計するほうがいいかもしれません。 – NotMe