NHibernate ist eine beliebte objektrelationale Zuordnungslösung (ORM) für .NET-Anwendungen, da sie Ihre Datenbankprogrammierung vereinfacht. Infolgedessen verwenden viele Anwendungen mit hohem Datenverkehr NHibernate und sind daher mit Skalierbarkeitsengpässen in der Datenbank konfrontiert.
Um dem entgegenzuwirken, stellt NHibernate eine Caching-Infrastruktur bereit, sodass Anwendungen stattdessen einen In-Memory-Cache-Speicher verwenden und verhindern können, dass ihre Datenbanken durch eine so hohe Anforderungslast erschöpft werden. Das NHibernate-Caching umfasst First-Level-Cache und Second-Level-Cache.
NCache Details NHibernate Caching-Dokumente Verwenden von Dapper Micro-ORM mit NCache
NHibernate First Level Cache und seine Einschränkungen
NHibernate First Level (1st Level) Cache stellt einen grundlegenden eigenständigen (in-proc) Cache bereit, der dem Sitzungsobjekt zugeordnet ist und nur auf die aktuelle Sitzung beschränkt ist. Standardmäßig reduziert dieser 1st-Level-Cache die Anzahl der SQL-Abfragen auf der Datenbank pro Sitzung. Aber es gibt viele Einschränkungen bei diesem 1st-Level-Cache, wie folgt:
- Jeder Prozess hat seinen eigenen 1st-Level-Cache, der nicht mit anderen 1st-Level-Caches synchronisiert ist, was die Datenintegrität zu einem Kampf macht.
- Die Cachegröße ist auf den Prozessspeicher beschränkt und kann nicht skaliert werden.
- Die Wiederverwendung von Worker-Prozessen bewirkt, dass der Cache geleert wird. Dann müssen Sie es neu laden, was die Anwendungsleistung verringert.
NCache Details DB mit NHibernate synchronisieren NHibernate-Abfrage-Caching
Lösung: Ein verteilter Cache für NHibernate
NHibernate Second Level Cache ist in der Session Factory vorhanden Dies bedeutet, dass mehrere Benutzersitzungen auf einen gemeinsamen Cache zugreifen können. Darüber hinaus verfügt der NHibernate 2nd-Level-Cache über eine steckbare Architektur, sodass Sie einen verteilten Cache eines Drittanbieters ohne Programmieraufwand daran anschließen können. NCache hat implementiert NHibernate Second-Level-Cache-Anbieter und Sie können es ohne Codeänderungen als verteilten Cache für NHibernate verwenden.
Das folgende Beispiel zeigt Ihnen die Verwendung NCache in Ihrer NHibernate-Anwendung als Cache der 2. Ebene:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<hibernate-configuration> <session-factory> <property name="cache.provider_class">Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider, Alachisoft.NCache.Integrations.NHibernate.Cache </property> <property name="proxyfactory.factory_class"> NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate </property> <property name="cache.use_second_level_cache">true </property> </session-factory> </hibernate-configuration> <ncache> <cache-regions> <region name="AbsoluteExpirationRegion" cache-name="myCache" priority="Default" expiration-type="sliding" expiration-period="180" use-async="false"> <region name="default" cache-name="myCache" priority="default" expiration-type="none" expiration-period="0"> </region></region></cache-regions> </ncache> |
Hier sind einige Vorteile von NCache als NHibernate 2nd-Level-Cache:
- NCache Synchronisiert über Prozesse und Server hinweg: NCache ist ein Cache, der von mehreren Servern gemeinsam genutzt wird. Dadurch wird sichergestellt, dass der Cache auf mehreren Servern konsistent ist und dass alle Cache-Aktualisierungen korrekt synchronisiert werden, wodurch Datenintegritätsprobleme vermieden werden.
- Skalierbare Cachegröße: NCache bündelt den Speicher aller Cache-Server zusammen. Sie können also die Cache-Größe erhöhen, indem Sie einfach weitere Server zum Cache-Cluster hinzufügen. Das bedeutet, dass Ihr Cache auf Hunderte von Gigabyte und sogar Terabyte anwachsen kann.
- Das Recycling des Anwendungsprozesses hat keine Auswirkungen auf den Cache: Ihre Anwendungsprozesse werden zustandslos, da sich alle Daten in einem verteilten Out-Proc-Cache befinden. Die Wiederverwendung von Anwendungsprozessen hat also keine Auswirkungen auf den Cache.
- Lineare Skalierbarkeit zur Bewältigung größerer Transaktionslasten: Sie können größere Transaktionslasten verwalten, ohne sich Sorgen machen zu müssen, dass Ihre Datenbank zu einem Engpass wird. Diese Leistung ist möglich, weil der verteilte Cache linear skaliert und Ihren Datenbankverkehr um bis zu 90 % reduziert.
- Verwenden Sie den Client-Cache, um In-Proc-Daten zu speichern: NCache bietet Unterstützung für Client-Cache, einen synchronisierten lokalen Cache oder Cache-on-Top-of-a-Cache, der in Ihrem Arbeitsprozess ausgeführt wird. Sie können es verwenden, um mehr Leistung in Ihren NHibernate-Anwendungen zu erzielen.
NCache Details NHibernate & NCache Verwenden Sie die NHibernate Cache-Video
Fazit!
Wie Sie sehen, ähnelt ein verteilter Cache NCache ermöglicht es Ihnen, NHibernate zu verwenden und Ihre Anwendung dennoch in einer Multi-Server-Konfiguration auszuführen. Sie können Ihre Anwendung auch skalieren und hohe Transaktionslasten bewältigen, indem Sie verwenden NCache als NHibernate Second Level Cache. Laden Sie eine voll funktionsfähige 60-Tage-Testversion herunter NCache Enterprise und probiere es selbst aus.