NHibernate ist eine beliebte objektrelationale Mapping-Lösung (ORM) für.NET. Außerdem wird es häufig in Umgebungen mit hohem Transaktionsaufkommen eingesetzt, in denen Anwendungen aufgrund von Datenbank- und Datenspeicherung mit Leistungs- und Skalierbarkeitsengpässen konfrontiert sind.
Um dies zu bewältigen, bietet NHibernate zwei Arten von Caching: First Level Cache (1st Level Cache) und Second Level Cache (2nd Level Cache). Der Cache der ersten Ebene ist integriert und an das „Sitzungsobjekt“ des Benutzers gebunden, während der Cache der zweiten Ebene eine steckbare Architektur bietet und an die Ebene des „Sitzungsfaktors“ (d. h. an die Anwendungsebene) gebunden ist. Dies bedeutet, dass der Cache nicht durch kommende und gehende Benutzersitzungen beeinträchtigt wird. Sie können einen Drittanbieter-Cache als NHibernate Second Level Cache anschließen.
NCache ist ein extrem schneller und linear skalierbarer verteilter Cache für .NET-Anwendungen. NCache Ermöglicht das Hinzufügen weiterer Cache-Server zur Bewältigung größerer Transaktionslasten. Sie können einstecken NCache als NHibernate Second Level Cache.
Als Teil der NHibernate Second Level Cache-Anbieterarchitektur NCache hat implementiert ICacheProvider
und ICacheinterfaces
. Als Ergebnis können Sie konfigurieren NCache als NHibernate Second Level Cache ohne jegliche Programmierung und einfach durch Änderungen der Konfigurationsdatei.
Sie ändern einfach Ihre app.config
und angeben NCache als Ihr Second-Level-Cache-Anbieter und fügen Sie eine Eigenschaft dafür hinzu. Sie aktivieren auch das Caching der zweiten Ebene und andere Untercaches von NHibernate in app.config. Hier ist ein Beispiel dafür app.config
Änderungen:
<hibernate-configurationxmlns="urn:nhibernate-configuration-2.2">
...
<session-factory>
...
<property name="cache.provider_class">
Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider,
Alachisoft.NCache.Integrations.NHibernate.Cache
</property>
<property name="cache.use_second_level_cache">
true
</property>
...
</session-factory>
</hibernate-configuration>
<appSettings>
<add key="ncache.application_id"
value="myapp" />
</appSettings>
NCache Ermöglicht die unterschiedliche Konfiguration jeder NHibernate-Region mit eigenen Eigenschaften zum Zwischenspeichern von Objekten. Für diesen Zweck NCache hat eine Konfigurationsdatei namens NCacheNHibernate.xml
, das alle vom NHibernate Second Level Cache verwendeten Regionskonfigurationen enthält. Im Folgenden finden Sie ein Beispiel dieser Konfigurationsdatei:
<configuration>
<application-config application-id="myapp"
enable-cache-exception="true"
default-region-name="default"
key-case-sensitivity="false">
<cache-regions>
<region name="default"
cache-name="mycache"
priority="default"
expiration-type="none"
expiration-period="0" />
<region name="AbsoluteExpirationRegion"
cache-name="myRegioncache"
priority="Default"
expiration-type="sliding"
expiration-period="180" />
</cache-regions>
...
</application-config>
</configuration>
NCache ist ein leistungsstarker verteilter Cache für .NET und bietet viele umfangreiche Funktionen. Eine dieser Funktionen ist die Datenbanksynchronisierung, bei der der Cache Datenbankänderungen verfolgt und ein zwischengespeichertes Element entweder ungültig macht oder es neu lädt, wenn sich die entsprechenden Daten in der Datenbank ändern.
Sie können den NHibernate Second Level Cache-Anbieter für konfigurieren NCache um die Datenbanksynchronisierung zu verwenden. Einfach modifizieren NCacheNHibernate.xml
Konfigurationsdatei wie folgt:
<configuration>
<application-config application-id="myapp"
enable-cache-exception="true"
default-region-name="default"
key-case-sensitivity="false">
...
<database-dependencies>
<dependency entity-name="nhibernator.BLL.Customer"
type="sql"
sql-statement="SELECT ContactName FROM dbo.Customers
WHERE CustomerID =?"
cache-key-format="depdency.customer:[pk]"/>
</database-dependencies>
</application-config>
</configuration>
NHibernate bietet eine Funktion zum Abfrage-Caching, bei der die Ergebnisse von Abfragen im Second-Level-Cache zwischengespeichert werden. Sie können den NHibernate Query Cache in aktivieren app.config
Konfigurationsdateien wie folgt:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
...
<session-factory>
...
<property name="cache.use_query_cache">
true
</property>
...
</session-factory>
</hibernate-configuration>
Die Abfrage wird zusammen mit den Primärschlüsseln der Ergebnismengen in einem Standardabfragebereich mit dem Namen gespeichert NHibernate.Cache.StandardQueryCache
. Die als Ergebnis der Abfrage abgerufenen Objekte werden jedoch in ihren jeweiligen Regionen zwischengespeichert. Darüber hinaus wird durch die Aktivierung des Abfrage-Cache nicht jede Abfrage standardmäßig zwischengespeichert. Stattdessen müssen Sie jede Abfrage im Code wie folgt als zwischenspeicherbar festlegen:
IQuery qry = session.CreateQuery("from Customer c").SetCacheable(true);
Wenn Ihre NHibernate-Anwendung in einer Umgebung mit mehreren Servern ausgeführt wird, benötigen Sie einen verteilten Cache wie z NCache als NHibernate-Cache-Anbieter der zweiten Ebene aus folgenden Gründen: