Mise en cache de SessionFactory et configuration pour plusieurs bases de données avec NHibernate

Quelques questions ici dans StackOverflow sur NHibernate et plusieurs bases de données (connectées dynamicment), m'adressent à croire que la meilleure solution serait de garder un cache de SessionFactory (par database) et un cache à Configuration, pour build SessionFactory plus rapidement.

Je voudrais savoir si cette approche est correcte, et principalement: Quel est le "poids" de SessionFactory en termes de consommation de memory par instance et de time à build?

PLUS SUR MON APPROCHE:

Connu que les caches de 1er et 2ème niveau vivent dans le "domaine" de SessionFactory, nous pourrions supposer que la consommation de memory pourrait être liée à la quantité d'ISession ouverte (qui inclut le 1er niveau de cache).

Pour le second niveau de cache, dans le cas où les bases de données partagent le même schéma et certaines tables en lecture seule, je pourrais utiliser une implémentation de cache globale partageant uniquement les tables readonly sur toutes les SessionFactories, ça sonne bien pour mon projet.

Ai-je raison ? Quel genre de problèmes de performance et de memory je pourrais avoir avec cette approche? Considérez une application Web (ASP.NET MVC, pas Webforms) accédant à plusieurs centaines (ou peut-être milliers) de bases de données, sur chaque requête HTTP dont elle a besoin find la database user et y accéder (get, utiliser et disposer un ISession).

PISCINE DE CONNEXION: Et qu'en est-il du pool de connection? Quel genre de comportement devrait-il avoir pour gérer un pool de centaines ou de milliers de bases de données comme dans cette approche? Certaines des implémentations actuelles utilisées avec NHibernate pourraient aider ou je devrais build mon propre?

Certains tests ont confirmé ce que certains gars ont dit sur le time et les ressources (cpu et memory) pour build Configuration et SessionFactory, les stands sont chers, mais le SessionFactory est plus, beaucoup plus cher. Mais nous n'avons que des tests individuels, des résultats empiriques, comme mes tests ce qui dépend de mon model de class, malheureusement.

Donc, je continue de croire que je dois mettre en cache SessionFactory et Configuration, mais si nous avons des centaines de bases de données dans une solution web nous avons un gros problème, parce que SessionFactory a faim de memory, c'est un "mangeur de memory". 400 instances et je m'attends à atteindre quelques milliers de bases de données.

Eh bien, comme nous utilisons SQLServer, nous avons conçu un cache pour avoir seulement une SessionFactory pour chaque instance SQLServer à la place de chaque database, donc dans le ConnectionProvider nous pouvons injecter une command sql USE 'catalog-name' qui prépare chaque connection au travail correctement avec sa database respectivement par request.

J'espère que d'autres personnes ayant le même problème pourraient aussi explorer des ressources comme celle de SQLServer, bien que certaines bases de données vous permettent simplement de le faire par le nom du schéma et non par la database (nom du catalogue).

Bonne chance.