Sin categoría

Presentación del proveedor de caché de segundo nivel NHibernate Couchbase

NHibernate ha soportado durante mucho tiempo la noción de cachés de segundo nivel, donde los resultados de las consultas se guardan en una caché fuera de proceso para una recuperación más rápida. La dirección NHContrib posee estas cachés, que incluyen ASP.NET HttpCache, Velocity (AppFabric) y Memcached. Esta última caché - Memcached - está implementada usando la librería Enyim.Caching de la que depende la librería .NET Couchbase Client Library. Dada esa dependencia y el hecho de que Couchbase es, por supuesto, compatible con Memcached, añadir Couchbase al conjunto de cachés de segundo nivel disponibles para NHibernate parecía natural.

Acabo de terminar de portar el proveedor NHContrib Memcached a Couchbase. La nueva caché de Couchbase está disponible en Couchbase Labs en http://github.com/couchbaselabs/nhibernate-caches-couchbase. Es plug and play y viene con un proyecto ASP.NET MVC de ejemplo para demostrar su uso. He detallado la configuración en el archivo README.md en el repositorio, pero voy a señalar algunos de los ejemplos de configuración del proyecto para dar una idea de cómo usarlo.

En la muestra, utilizo FluentNHibernate para la configuración. No voy a describir FluentNHibernate aquí más que para decir que le permite configurar NHibernate en código, en lugar del conjunto estándar de archivos XML. En el proyecto de ejemplo, tengo una clase estática con un método estático para configurar el cliente.

público clase FluentSession
{
    público estático ISessionFactory CrearSesiónFactoría()
    {
        cadena connectionString = @"Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|Beers.mdf;Integrated Security=True;User Instance=True";

        devolver Con fluidez.Configure()
            .Base de datos(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString))
            <fuerte>.Caché(c => c.UseQueryCache().ClaseProveedor<CouchbaseCacheProvider>())fuerte>
            .Asignaciones(m =>m.FluentMappings.AddFromAssemblyOf<Cerveza>())
            .ExposeConfiguration(c => c.EstablecerPropiedad("current_session_context_class", "web"))
            .BuildSessionFactory();
    }

   
}

La línea relevante para el proveedor de caché de Couchbase se encuentra en la llamada fluida a .Cache, donde se indica a NHibernate que almacene las consultas en caché y que lo haga utilizando el nuevo proveedor de caché de Couchbase. Aparte de eso, no hay nada específico sobre el proveedor de Couchbase que necesite ser configurado. Sin embargo, hay algunas otras piezas necesarias para utilizar cualquier caché de segundo nivel. Necesitas habilitar la caché en la clase modelo.

Así que para mi clase de cerveza:

público clase Cerveza
{
    [Requerido]
    público virtual int Id { consiga; configure; }

    [Requerido]
    público virtual cadena Nombre { consiga; configure; }

    [Requerido]
    público virtual cadena Cervecería { consiga; configure; }

    [Requerido]
    público virtual float ABV { consiga; configure; }
}

Tengo que configurar la opción Caché en el BeerMap.

público clase BeerMap : ClassMap<Cerveza>
{
    público BeerMap()
    {
        Cuadro("Cervezas");
<fuerte>        Caché.LecturaEscritura();

fuerte>        Id(b => b.Id);
        Mapa(b => b.Nombre).No.Anulable().Longitud(30);
        Mapa(b => b.Cervecería).No.Anulable().Longitud(50);
        Mapa(b => b.ABV).No.Anulable();
    }
}

Algo a tener en cuenta con cualquier caché de 2º nivel y proyectos web. Por defecto la caché será por petición - no por sesión. Es necesario configurar una aplicación ASP.NET para gestionar sus sesiones como se describe aquí. Si no configuras tu aplicación de esta manera, verás que la caché se está recreando para cada solicitud, incluso dentro de la misma sesión.  

Así que si has estado esperando una solución de caché de segundo nivel para NHibernate que sea rápida y escalable, ya está aquí.

Ten en cuenta que este proveedor se incluye como parte de Couchbase Labs y no es un producto con soporte oficial. Eres libre de usar el código como quieras ya que está licenciado bajo Apache License 2.0. El proyecto original que se encuentra en NHContrib está licenciado bajo la LGPL.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por John Zablocki, Desarrollador NET. Desarrollador SDK, Couchbase

John Zablocki es desarrollador de NET. SDK en Couchbase. John es también el organizador de Beantown ALT.NET y antiguo profesor adjunto en la Universidad de Fairfield. También puedes consultar el libro en Amazon llamado "Couchbase Essentials" que explica cómo instalar y configurar Couchbase Server.

3 Comentarios

  1. Akira Yamamoto marzo 7, 2013 a 9:11 pm

    ¿Funciona esto también con Membase?

  2. ¿Cómo definimos las regiones de caché de modo que podamos ajustar vencimientos más largos o más cortos para determinadas entidades o consultas?

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.