NCache Open Source como um cache de segundo nível Nhibernate

NHibernate é uma solução popular de mapeamento objeto-relacional (ORM) para .NET. E é frequentemente usado em ambientes de alta transação, onde os aplicativos enfrentam gargalos de desempenho e escalabilidade devido ao banco de dados e ao armazenamento de dados.

Para lidar com isso, o NHibernate fornece dois tipos de cache, Cache de Primeiro Nível (Cache de 1º Nível) e Cache de Segundo Nível (Cache de 2º Nível). O cache de primeiro nível é integrado e vinculado ao "Objeto de sessão" do usuário, enquanto o cache de segundo nível fornece uma arquitetura conectável e está vinculado ao nível "Fator de sessão" (ou seja, no nível do aplicativo). Isso significa que o cache não é afetado pela entrada e saída de sessões do usuário. Você pode conectar um cache de terceiros como NHibernate Second Level Cache.

NCache é um cache distribuído extremamente rápido e linearmente escalonável para aplicativos .NET. NCache permite adicionar mais servidores de cache para lidar com cargas de transações maiores. Você pode conectar NCache como Cache de segundo nível do NHibernate.

Configurando NCache como NHibernate Cache de Segundo Nível

Como parte da arquitetura do provedor de cache de segundo nível NHibernate, NCache implementou ICacheProvider e ICacheinterfaces. Como resultado, você pode configurar NCache como NHibernate Second Level Cache sem qualquer programação e simplesmente através de alterações no arquivo de configuração.

Você simplesmente modifica seu app.config e especificar NCache como seu provedor de cache de segundo nível e adicione uma propriedade para ele. Você também habilita o cache de segundo nível e outros subcaches do NHibernate em app.config. Aqui está um exemplo de app.config alterar:

<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>

Configurar Regiões Cache

NCache permite que cada região do NHibernate seja configurada de forma diferente com suas próprias propriedades para armazenar objetos em cache. Para este propósito NCache tem um arquivo de configuração chamado NCacheNHibernate.xml, que contém todas as configurações de região usadas pelo cache de segundo nível do NHibernate. A seguir está um exemplo desse arquivo de configuração:

<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>

Configurar sincronização de banco de dados

NCache é um poderoso cache distribuído para .NET e oferece muitos recursos avançados. Um desses recursos é a sincronização do banco de dados, onde o cache rastreia as alterações do banco de dados e invalida um item armazenado em cache ou o recarrega se seus dados correspondentes forem alterados no banco de dados.

Você pode configurar o provedor de cache de segundo nível NHibernate para NCache para usar a sincronização de banco de dados. Basta modificar NCacheNHibernate.xml arquivo de configuração da seguinte forma:

<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>

Configurar o cache de consulta do NHibernate

O NHibernate fornece um recurso de cache de consultas onde armazena os resultados das consultas no cache de segundo nível. Você pode ativar o NHibernate Query Cache em app.config arquivos de configuração da seguinte forma:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  ...
  <session-factory>
  ...
    <property name="cache.use_query_cache">
    true
    </property>
    ...
  </session-factory>
</hibernate-configuration>

A consulta junto com as chaves primárias dos conjuntos de resultados é armazenada em uma região de consulta padrão chamada NHibernate.Cache.StandardQueryCache. Porém, os objetos recuperados como resultado da consulta são armazenados em cache em suas respectivas regiões. Além disso, ativar o cache de consulta não armazena em cache cada consulta por padrão. Em vez disso, você deve definir cada consulta como armazenável em cache no código da seguinte forma:

IQuery qry = session.CreateQuery("from Customer c").SetCacheable(true);

Benefícios da NCache como NHibernate Cache de Segundo Nível

Se o seu aplicativo NHibernate estiver sendo executado em um ambiente multiservidor, você precisará de cache distribuído como NCache como provedor de cache de segundo nível do NHibernate pelos seguintes motivos:

  • Escalabilidade linear: Você pode dimensionar seu aplicativo linearmente adicionando mais servidores de cache à medida que a carga de transações aumenta. Isso aumenta sua capacidade de transação e de armazenamento.
  • Cache verdadeiramente elástico: NCache é um cache verdadeiramente elástico com uma arquitetura de clustering de cache ponto a ponto e um rico conjunto de topologias de cache como cache espelhado, replicado, particionado e de réplica de partição. Isso permite garantir 100% de tempo de atividade e nenhuma perda de dados. Você obtém tudo isso automaticamente ao usar NCache com NHibernate.
  • Sincronização de banco de dados: Você pode sincronizar o cache com o banco de dados (SQL Server, Oracle e OLEDB) para que, se algum dado no banco de dados for alterado, o cache invalidará ou recarregará seus itens armazenados em cache correspondentes. Isso garante que o cache esteja sempre atualizado. Você pode habilitar esse recurso com o NHibernate, conforme mostrado acima.
  • Operações Assíncronas: NCache possui operações assíncronas em que seu aplicativo não precisa esperar nem mesmo a atualização do cache. Você pode habilitar isso com o NHibernate.
  • Serialização compacta: NCache tem sua própria serialização que é muito mais rápida que a serialização .NET normal. Você pode habilitar isso sem nenhuma alteração de código. NCache na verdade, gera código de serialização no momento da inicialização, compila-o na memória e usa-o para operações de serialização/desserialização. Você pode misturar e combinar isso com a serialização normal do .NET.

O que fazer a seguir?

© Copyright Alachisoft 2002 - . Todos os direitos reservados. NCache é uma marca registrada da Diyatech Corp.