Uso de procedimientos almacenados de CLR para sincronizar NCache con una base de datos

SQL Server proporciona un mecanismo de notificación de eventos donde el caché distribuido como NCache puede registrarse para la notificación de cambios a través de SqlCacheDependency y luego recibir notificaciones de SQL Server cuando los datos subyacentes cambien en la base de datos. Esto permite NCache para invalidar o recargar inmediatamente el elemento correspondiente en caché y esto mantiene el caché siempre sincronizado con la base de datos. Sin embargo, SqlCacheDependency puede convertirse en una forma muy intensiva de recursos de sincronizar la memoria caché con la base de datos.

Una mejor alternativa consiste en escribir un procedimiento almacenado CLR que se conecta con NCache desde dentro de SQL Server y actualiza o invalida directamente el elemento en caché correspondiente. Es más eficiente en el uso de los recursos porque no crea estructuras de datos relacionadas con SqlCacheDependency. Y tampoco activa eventos .NET para NCache. En cambio, abre una NCache conexión del cliente y le dice directamente NCache si invalidar un elemento almacenado en caché o volver a cargarlo. Y esta conexión con NCache está altamente optimizado y es mucho más rápido y ligero que los eventos .NET.

Estos son los pasos para usar el procedimiento de almacenamiento CLR con NCache:

  1. Copie log4net y protobuf-net desde Windows GAC a NCacheCarpeta /bin/assembly/2.0 (elija 4.0 si la plataforma de destino es .NET 4.0).
  2. Registro NCache y siguientes asambleas en el servidor SQL. El ejemplo se da a continuación. En este ejemplo, estamos utilizando Northwind como base de datos de muestra.
  3. use Northwind 
    
    alter database Northwind
    set trustworthy on;
    go
    
    drop assembly SMdiagnostics
    drop assembly [System.Web]
    drop assembly [System.Messaging]
    drop assembly [System.ServiceModel]
    drop assembly [System.Management]
    
    
    CREATE ASSEMBLY SMdiagnostics AUTHORIZATION dbo FROM N'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication
    Foundation\SMdiagnostics.dll' WITH permission_set = unsafe
    
    CREATE ASSEMBLY [System.Web] AUTHORIZATION dbo FROM N'C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Web.dll' WITH permission_set = unsafe
    
    CREATE ASSEMBLY [System.Management] AUTHORIZATION dbo FROM N'C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.management.dll' WITH permission_set = unsafe
    
    CREATE ASSEMBLY [System.Messaging] AUTHORIZATION dbo FROM N'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll' WITH permission_set = unsafe
    CREATE ASSEMBLY [System.ServiceModel] AUTHORIZATION dbo FROM N'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.ServiceModel.dll' WITH permission_set = unsafe
    CREATE ASSEMBLY NCache from N'C:\Program Files\NCache\bin\assembly\2.0\Alachisoft.NCache.Web.dll' WITH permission_set = unsafe
  4. Abra Visual Studio para escribir un procedimiento almacenado contra NCache Y cree un proyecto de base de datos SQL CLR como se menciona a continuación. Agregar una referencia a la NCache ensamblaje que creó en el último paso. La asamblea que necesita consultar se destaca arriba. Aparecerá en SQL Server con el mismo nombre que "NCache.
  5. Uso de procedimientos almacenados de CLR para sincronizar NCache con una base de datos
  6. Escriba su procedimiento almacenado. Aquí hay un código de muestra dado:
  7. public partial class StoredProcedures
    {
        [Microsoft.SqlServer.Server.SqlProcedure]
        public static void TestSProc(string cacheName)
        {
            //--- Put your code here
            SqlPipe sp = SqlContext.Pipe;
    
            try
            {
                sp.Send("Starting .....");
    
                if (string.IsNullOrEmpty(cacheName))
                    cacheName = "mycache";
    
                Cache _cache = NCache.InitializeCache(cacheName);
                _cache.Insert("key", DateTime.Now.ToString());
                sp.Send("Test is completed ...");
            }
  8. Habilite la integración de CLR en la base de datos como se indica a continuación:
  9. sp_configure 'clr enabled', 1
    GO
    RECONFIGURE
    GO
  10. Implemente el procedimiento almacenado desde Visual Studio y pruébelo.
  11. Después de implementar el procedimiento almacenado, debe colocar el ensamblaje del procedimiento almacenado en (C:\Archivos de programa\NCache\bin\assembly\2.0) ya que no resuelve las referencias de ensamblaje directamente desde la carpeta GAC ​​de Windows y las necesita localmente.

Los desencadenadores o procedimientos almacenados basados ​​en CLR pueden mejorar en gran medida el rendimiento de la aplicación en comparación con el SqlCacheDependency eso es relativamente más lento y puede ser abrumador para grandes conjuntos de datos.


¿Qué hacer a continuación?

© Copyright Alachisoft 2002 - Todos los derechos reservados. NCache es una marca registrada de Diyatech Corp.