Utilizzo delle stored procedure CLR per la sincronizzazione NCache con un database

SQL Server fornisce un meccanismo di notifica degli eventi a cui piace la cache distribuita NCache può registrarsi per la notifica di modifica tramite SqlCacheDependency e quindi ricevere notifiche da SQL Server quando i dati sottostanti cambiano nel database. Questo permette NCache per invalidare o ricaricare immediatamente l'elemento memorizzato nella cache corrispondente e questo mantiene la cache sempre sincronizzata con il database. Tuttavia, SqlCacheDependency può diventare un modo ad alta intensità di risorse per sincronizzare la cache con il database.

Un'alternativa migliore prevede la scrittura di una stored procedure CLR che si connette a NCache da SQL Server e aggiorna o invalida direttamente l'elemento memorizzato nella cache corrispondente. È più efficiente in termini di risorse perché non crea strutture di dati correlate SqlCacheDependency. Inoltre, non genera eventi .NET su NCache. Invece, si apre un NCache connessione client e dice direttamente NCache se invalidare un elemento memorizzato nella cache o ricaricarlo. E, questa connessione con NCache è altamente ottimizzato e molto più veloce e leggero degli eventi .NET.

Di seguito sono riportati i passaggi per utilizzare la procedura di archiviazione CLR con NCache:

  1. Copia log4net e protobuf-net da Windows GAC a NCacheCartella /bin/assembly/2.0 (scegliere 4.0 se la piattaforma di destinazione è .NET 4.0).
  2. Registrati NCache e successive assemblee nel server SQL. L'esempio è riportato di seguito. In questo esempio utilizziamo Northwind come database di esempio.
  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. Aprire Visual Studio per scrivere una stored procedure NCache E crea un progetto di database CLR SQL come indicato di seguito. Aggiungi un riferimento al NCache assieme creato nell'ultimo passaggio. L'assieme a cui è necessario fare riferimento è evidenziato sopra. Apparirà in SQL Server con lo stesso nome di "NCache".
  5. Utilizzo delle stored procedure CLR per la sincronizzazione NCache con un database
  6. Scrivi la tua procedura memorizzata. Ecco un codice di esempio fornito:
  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. Abilita l'integrazione CLR sul database come indicato di seguito:
  9. sp_configure 'clr enabled', 1
    GO
    RECONFIGURE
    GO
  10. Distribuire la stored procedure da Visual Studio e testarla.
  11. Dopo aver distribuito la stored procedure, è necessario posizionare l'assembly della stored procedure in (C:\Programmi\NCache\bin\assembly\2.0) in quanto non risolve i riferimenti all'assembly direttamente dalla cartella GAC ​​di Windows e ne ha bisogno in locale.

Le stored procedure o i trigger basati su CLR possono migliorare notevolmente le prestazioni dell'applicazione rispetto a SqlCacheDependency che è relativamente più lento e può essere opprimente per set di dati di grandi dimensioni.


Cosa fare dopo?

© Copyright Alachisoft 2002 - . Tutti i diritti riservati. NCache è un marchio registrato di Diyatech Corp.