Cache de segundo nível do Entity Framework com NCache

Entity Framework é uma estrutura de mapeamento objeto-relacional popular para .NET da Microsoft. Ele permite trabalhar com dados relacionais por meio de objetos de domínio. E elimina a necessidade da maior parte do código de persistência do banco de dados que, de outra forma, você precisaria escrever.

A popularidade do Entity Framework resultou em seu uso frequente em aplicativos de alta transação, onde o desempenho e a escalabilidade são críticos. Mas, na maioria dos casos de transações elevadas, o banco de dados rapidamente se torna um gargalo. Isso ocorre porque, diferentemente da camada de aplicativos, onde você pode adicionar mais servidores de aplicativos conforme necessário para escalar, você não pode fazer o mesmo com a camada de banco de dados.

A única maneira de alcançar essa escalabilidade é com um cache distribuído como NCache. NCache é um cache distribuído extremamente rápido e escalonável para aplicativos .NET. Ele permite armazenar dados de aplicativos em cache, reduzir as dispendiosas viagens ao banco de dados e melhorar o desempenho e a escalabilidade de seus aplicativos.

Embora o Entity Framework não forneça um modelo de provedor de cache de segundo nível (2º nível), NCache implementou um provedor ADO.NET personalizado para Entity Framework com o qual NCache pode plug-in e cache de resultados de consultas do Entity Framework. Isso permite que você comece a usar o cache distribuído em seu aplicativo Entity Framework sem fazer nenhuma alteração no código.

Exibir documentação

Por que usar NCache como cache de segundo nível do Entity Framework?

Se o seu aplicativo Entity Framework estiver sendo executado em um ambiente multi-servidor, você precisará de um cache distribuído como um cache de segundo nível do Entity Framework. E, NCache é um cache de segundo nível do Entity Framework ideal para configurações de vários servidores e você deve usá-lo pelos seguintes motivos:

  1. NCache é extremamente rápido: NCache é um cache distribuído extremamente rápido e oferece tempos de resposta inferiores a um milissegundo.
  2. NCache fornece escalabilidade linear: NCache nunca se torna um gargalo de escalabilidade. Ele permite adicionar servidores ao cluster de cache para obter escalabilidade linear e lidar com cargas de transações extremas.
  3. O tamanho do cache pode crescer infinitamente: NCache fornece particionamento de cache e agrupa memória de todos os servidores de cache para ele. Assim, você pode aumentar o armazenamento em cache simplesmente adicionando mais servidores ao cluster de cache.
  4. NCache replica dados de forma inteligente: NCache permite replicar o cache de forma inteligente e sem comprometer o desempenho. Assim, você não perderá nenhum dado de cache, mesmo se um servidor de cache ficar inativo.
  5. NCache oferece 100% de tempo de atividade: NCache tem um cluster de cache dinâmico de autorrecuperação sem nenhum ponto único de falha. Como resultado, NCache permite adicionar ou remover servidores de cache em tempo de execução sem interromper o aplicativo ou o cache.

Use NCache como cache de segundo nível do Entity Framework sem programação

A melhor coisa sobre o uso NCache com o Entity Framework é que não há necessidade de programação de sua parte. Você simplesmente modifica os arquivos de configuração do seu aplicativo e especifica NCache como seu provedor de cache de segundo nível. Aqui está um exemplo de alterações no app.config:

<interceptors>
	<interceptor type="Alachisoft.NCache.Integrations.EntityFramework.Caching.EFCommandInterceptor, 
	                   Alachisoft.Integrations.EntityFramework.CachingProvider" />
</interceptors>

Use o modo de análise e o modo de armazenamento em cache

Como NCache O provedor de cache de segundo nível do Entity Framework se conecta como um provedor ADO.NET personalizado, permite executá-lo no modo de análise, onde registra todas as diferentes consultas que seu aplicativo está emitindo ao Entity Framework. Essas consultas são registradas em um arquivo junto com uma contagem de quantas vezes essa consulta foi chamada durante esse modo de análise. Abaixo segue um exemplo:

<analysis-report>
<!--Call-count = 21-->
 <query query-text="" ["SELECT FROM Products"] | 
        [stored-procedure-name = ""] 
        caching = "true"
        expiration-type="absolute" | 
        sliding = "" 
        expiration-time="180"
        dbsyncdependency = "true"/>
</analysis-report>

Isso permite determinar quais consultas você deseja armazenar em cache e por quanto tempo. Você também pode especificar a sincronização de banco de dados para algumas ou todas as suas consultas.

NCache Recursos para o cache de segundo nível do Entity Framework

Ao ligar NCache Provedor de cache de segundo nível do Entity Framework por meio de alterações no app.config, você obterá um cache distribuído de nível empresarial para seu aplicativo. Aqui estão alguns recursos NCache fornece aplicativos do Entity Framework.

  1. Sincronize o cache com o banco de dados: Alguns dados que estão no cache podem ser alterados no banco de dados sem o conhecimento ou envolvimento da sua aplicação. E, para esses dados, você pode especificar as classes correspondentes para o recurso de sincronização de banco de dados do NCache. Isso permite NCache para conectar-se ao banco de dados, monitorar alterações de dados e atualizar o cache automaticamente para garantir que os dados no cache estejam sempre sincronizados com o banco de dados. NCache fornece SqlDependency para SQL Server, OracleDependency para Oracle e DbDependency para qualquer banco de dados compatível com OLEDB.
  2. Expiração absoluta: Expiração absoluta em NCache é especificado separadamente para cada item armazenado em cache e é um valor de data e hora quando NCache expira automaticamente o item. Para estrutura de entidade, NCache pede que você especifique um valor de "intervalo" e, em seguida, usa a fórmula "Now() + intervalo" para calcular o valor de data e hora para expiração absoluta.
  3. Expiração deslizante: Expiração deslizante em NCache é especificado separadamente para cada item armazenado em cache e é um valor de intervalo. NCache expira o item armazenado em cache se ele não tiver sido buscado nem atualizado nesse intervalo. Você pode especificar esse intervalo por meio de NCache Arquivo de configuração do provedor de cache de segundo nível do Entity Framework.
  4. Serialização compacta: Sempre que qualquer objeto .NET for armazenado em cache fora do processo ou distribuído, ele deverá primeiro ser serializado. E a serialização regular do .NET é lenta porque usa o .NET Reflection em tempo de execução. NCache fornece uma maneira para você registrar suas aulas com NCache e NCache gera código de serialização quando seu aplicativo se conecta ao cache. NCache em seguida, compila esse código na memória e o utiliza para serialização. Isso é quase 10 vezes mais rápido que a serialização normal do .NET. E você pode usar esse recurso com Entity Framework. Basta registrar suas classes Entity Framework Entity com NCache para serialização compacta.

utilização NCache Diretamente de aplicativos do Entity Framework

Embora, usando NCache como o cache de segundo nível do Entity Framework é muito rápido e fácil, ele fornece apenas um conjunto limitado de NCache características. A razão para isso é que NCache está vinculado ao fato de estar conectado como um provedor ADO.NET personalizado e deve lidar com o nível de consulta SQL. Existem numerosos NCache recursos que você não pode usar se decidir usar NCache como provedor de cache de segundo nível do Entity Framework.

A alternativa para você é usar NCache diretamente de seu aplicativo Entity Framework, fazendo NCache Chamadas de API como todos os outros aplicativos .NET que não são do Entity Framework fazem. Embora haja um pequeno esforço de programação para seguir esse caminho, você pode decidir que os benefícios superam o esforço extra de programação.

NCache Recursos perdidos no cache de segundo nível do Entity Framework

Abaixo está uma lista de recursos que você perderia se o usasse como cache de segundo nível do Entity Framework versus se você usasse NCache diretamente do seu aplicativo.

  1. Operações em massa
  2. Dependências de cache
    • Baseado em chave
    • Baseado em arquivo
    • Personalizadas
  3. Grupos e subgrupos
  4. Tags
  5. Tags nomeadas
  6. Pesquisas baseadas em Object Query Language (OQL) e LINQ
  7. Bloqueio e desbloqueio de itens em cache
  8. Versionamento de itens de cache
  9. API de streaming
  10. Leitura, gravação e gravação atrás
  11. Notificações de eventos
    • Baseado em itens (atualizar e remover)
    • Uso geral (adicionar, atualizar, remover)
    • Personalizadas
  12. Consulta Contínua
  13. Compartilhamento de dados em tempo de execução
  14. Carregador de cache

O que fazer a seguir?

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