Es würde mich sehr wundern, wenn Sie überhaupt alle Informationen in den Speicher laden müssten. Ich sage das, weil ich, nur als ein Beispiel, gerade an einer Webanwendung arbeite, die (aus verschiedenen Gründen) Tausende von Datensätzen auf vielen Seiten lädt. Das ist PHP + MySQL. Und selbst das schafft es und rendert eine Seite in weit unter 100ms.
Bevor Sie diesen Weg einschlagen, vergewissern Sie sich, dass Sie es müssen. Machen Sie zunächst Ihre Datenbank so leistungsfähig wie möglich. Dazu gehören natürlich auch Dinge wie geeignete Indizes und das Tuning Ihrer Datenbank, aber auch hier wird das Pferd vom Schwanz her aufgezäumt.
Zuallererst müssen Sie sicherstellen, dass Sie ein gutes relationales Datenmodell haben: eines, das sich für leistungsfähige Abfragen eignet. Dies ist sowohl eine Kunst als auch eine Wissenschaft.
Auch wenn Sie NHibernate mögen, aber ORMs sind nicht immer die beste Wahl . Es gibt zum Beispiel einige Eckfälle, in denen handkodiertes SQL weitaus besser ist.
Wenn Sie ein gutes Datenmodell haben, Ihre Indizes und Datenbankparameter optimiert und NHibernate richtig konfiguriert haben, sollten Sie die Speicherung von Daten im Speicher in Betracht ziehen. wenn und nur wenn die Leistung noch ein Thema ist .
Die einzigen Fälle, in denen ich dies tun musste, waren Systeme, die Millionen von Transaktionen pro Tag durchführen müssen.
Ein Grund, das In-Memory-Caching zu vermeiden, ist, dass es die Komplexität erhöht. Sie müssen sich mit Fragen wie dem Ablauf des Cache, unabhängigen Aktualisierungen des zugrunde liegenden Datenspeichers, der Frage, ob Sie synchrone oder asynchrone Aktualisierungen verwenden, der Frage, wie Sie dem Client eine konsistente (wenn auch nicht aktuelle) Sicht auf Ihre Daten geben, der Frage, wie Sie mit Failover und Replikation umgehen, usw. befassen. Die Kosten für die Komplexität sind enorm.
Angenommen, Sie haben alle oben genannten Schritte unternommen und brauchen es immer noch, dann klingt es für mich, als bräuchten Sie eine Cache- oder Grid-Lösung. Hier ist eine Überblick über Java Grid/Cluster-Lösungen aber viele von ihnen (z.B. Coherence, memcached) gelten auch für .Net. Eine weitere Wahl für .Net ist Geschwindigkeit .
Es muss darauf hingewiesen und betont werden, dass etwas wie NHibernate nur dann konsistent ist, wenn die Datenbank nicht von außen aktualisiert wird und es genau einen NHibernate-fähigen Prozess gibt (außer bei Clusterlösungen). Wenn zwei Desktop-Anwendungen auf zwei verschiedenen PCs dieselbe Datenbank mit NHibernate aktualisieren, funktioniert das Caching einfach nicht, weil die Persistenzeinheiten die Änderungen des anderen nicht kennen.