NHibernate と複数のデータベース (動的に接続されている) に関する StackOverflow でのいくつかの質問に対して、SessionFactory のキャッシュを (データベースごとに) 保持し、構成へのキャッシュを保持して、SessionFactory をより高速に構築することが最善の解決策であると考えています。
このアプローチが正しいかどうかを知りたいのですが、主に、インスタンスごとのメモリ消費量とビルド時間の観点から、SessionFactory の「重み」はどれくらいですか?
私のアプローチの詳細:
第 1 レベルと第 2 レベルのキャッシュが SessionFactory の「レルム」に存在することがわかっているため、メモリ消費量は開かれた ISession の量 (第 1 キャッシュ レベルを含む) に関連している可能性があると推測できます。
2 番目のキャッシュ レベルでは、データベースが同じスキーマを共有し、共通の読み取り専用テーブルをいくつか持っている私の場合、すべての SessionFactories で読み取り専用テーブルのみを共有するグローバル キャッシュ実装を使用できます。私のプロジェクトにはいいですね。
私は正しいですか?このアプローチでは、どのようなパフォーマンスとメモリの問題が発生する可能性がありますか? 数百 (またはおそらく数千) のデータベースにアクセスする Web アプリケーション (Web フォームではなく ASP.NET MVC) を考えてみましょう。HTTP REQUEST ごとに、ユーザー データベースを見つけて、そのデータベースへのアクセスに対処します (ISession を取得、使用、破棄します)。
接続プール: 接続プールはどうですか? そのアプローチのように、数百または数千のデータベースのプールを管理するには、どのような動作が必要ですか? NHibernate で使用されている現在の実装の一部が役立つか、独自に構築する必要がありますか?