Sem categoria

Apresentando o provedor de cache de segundo nível do NHibernate Couchbase

O NHibernate há muito tempo suporta a noção de caches de segundo nível, em que os resultados da consulta são salvos em um cache fora do processo para uma recuperação mais rápida. O NHContrib possui esses caches, que incluem ASP.NET HttpCache, Velocity (AppFabric) e Memcached. Esse último cache - Memcached - é implementado usando a biblioteca Enyim.Caching, da qual depende a biblioteca do cliente .NET Couchbase. Dada essa dependência e o fato de o Couchbase ser compatível com o Memcached, adicionar o Couchbase ao conjunto de caches de segundo nível disponíveis para o NHibernate pareceu natural.

Acabei de terminar a portabilidade do provedor NHContrib Memcached para o Couchbase. O novo cache do Couchbase está disponível no Couchbase Labs em https://github.com/couchbaselabs/nhibernate-caches-couchbase. Ele é plug and play e vem com um projeto ASP.NET MVC de amostra para demonstrar seu uso. Detalhei a configuração no arquivo README.md no repositório, mas vou apontar algumas das configurações do projeto de amostra para dar uma ideia de como usá-lo.

Na amostra, eu uso FluentNHibernate para configuração. Não descreverei o FluentNHibernate aqui, a não ser para dizer que ele permite que você configure o NHibernate no código, em vez do conjunto padrão de arquivos XML. No projeto de exemplo, tenho uma classe estática com um método estático para configurar o cliente.

público classe FluentSession
{
    público estático ISessionFactory CreateSessionFactory()
    {
        string connectionString = @"Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|Beers.mdf;Integrated Security=True;User Instance=True";

        retorno Fluentemente.Configurar()
            .Banco de dados(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString))
            <forte>.Cache(c => c.UseQueryCache().Classe de provedor<CouchbaseCacheProvider>())</forte>
            .Mapeamentos(m =>m.FluentMappings.AddFromAssemblyOf<Cerveja>())
            .ExposeConfiguration(c => c.SetProperty("current_session_context_class", "web"))
            .BuildSessionFactory();
    }

    ...
}

A linha relevante para o provedor de cache do Couchbase está na chamada fluente .Cache, na qual você está instruindo o NHibernate a armazenar em cache as consultas e a armazená-las usando o novo provedor de cache do Couchbase. Além disso, não há nada específico sobre o provedor Couchbase que precise ser configurado. No entanto, há algumas outras partes necessárias para usar qualquer cache de segundo nível. Você precisa ativar o cache na classe de modelo.

Então, para minha aula sobre cerveja:

público classe Cerveja
{
    [Necessário]
    público virtual int Id { obter; definir; }

    [Necessário]
    público virtual string Nome { obter; definir; }

    [Necessário]
    público virtual string Cervejaria { obter; definir; }

    [Necessário]
    público virtual flutuante ABV { obter; definir; }
}

Tenho que definir a opção Cache no BeerMap.

público classe BeerMap : ClassMap<Cerveja>
{
    público BeerMap()
    {
        Tabela("Cervejas");
<forte>        Cache.Leitura e gravação();

</forte>        Id(b => b.Id);
        Mapa(b => b.Nome).Não.Nulável().Comprimento(30);
        Mapa(b => b.Cervejaria).Não.Nulável().Comprimento(50);
        Mapa(b => b.ABV).Não.Nulável();
    }
}

Algo que deve ser lembrado em qualquer cache de segundo nível e projetos da Web. Por padrão, o cache será por solicitação, não por sessão. Você precisa configurar um aplicativo ASP.NET para gerenciar suas sessões conforme descrito aqui. Se você não configurar seu aplicativo dessa forma, verá que o cache está sendo recriado para cada solicitação, mesmo dentro da mesma sessão.  

Portanto, se você estava esperando por uma solução de cache de segundo nível extremamente rápida e dimensionável para o NHibernate, ela está aqui.

Observe que esse provedor está incluído como parte do Couchbase Labs e não é um produto com suporte oficial. Você está livre para usar o código como quiser, pois ele está licenciado sob a Apache License 2.0. O projeto original encontrado no NHContrib está licenciado sob a LGPL.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por John Zablocki

John Zablocki é um desenvolvedor NET. SDK Developer na Couchbase. John também é o organizador do Beantown ALT.NET e ex-adjunto da Fairfield University. Você também pode conferir o livro na Amazon chamado "Couchbase Essentials", que explica como instalar e configurar o Couchbase Server.

3 Comentários

  1. Akira Yamamoto março 7, 2013 em 9:11 pm

    Isso também funciona com o Membase?

    1. Akira Yamamoto março 8, 2013 em 2:43 pm

      Sim, é verdade.

  2. Como definimos as regiões de cache para que possamos ajustar as expirações mais longas ou mais curtas para determinadas entidades ou consultas?

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.