Usando procedimentos armazenados CLR para sincronizar NCache com um banco de dados

O SQL Server fornece um mecanismo de notificação de eventos em que o cache distribuído, como NCache pode se registrar para notificação de alteração através SqlCacheDependency e, em seguida, receba notificações do SQL Server quando os dados subjacentes forem alterados no banco de dados. Isso permite NCache para invalidar ou recarregar imediatamente o item em cache correspondente e isso mantém o cache sempre sincronizado com o banco de dados. No entanto, SqlCacheDependency pode se tornar uma maneira muito intensiva de recursos de sincronização do cache com o banco de dados.

Uma alternativa melhor envolve escrever um procedimento armazenado CLR que se conecta com NCache de dentro do SQL Server e atualiza ou invalida diretamente o item em cache correspondente. É mais eficiente em termos de recursos porque não está criando estruturas de dados relacionadas a SqlCacheDependency. E também não dispara eventos .NET para NCache. Em vez disso, abre uma NCache conexão do cliente e informa diretamente NCache invalidar um item em cache ou recarregá-lo. E essa ligação com NCache é altamente otimizado e muito mais rápido e leve que eventos .NET.

Aqui estão as etapas para usar o procedimento de armazenamento CLR com NCache:

  1. Copie log4net e protobuf-net do Windows GAC para NCache/bin/assembly/2.0 (escolha 4.0 se a plataforma de destino for .NET 4.0).
  2. Inscrições NCache e seguintes montagens no servidor SQL. Exemplo é dado abaixo. Neste exemplo, estamos usando o Northwind como um banco de dados de exemplo.
  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 o visual studio para escrever um procedimento armazenado NCache E crie um projeto de banco de dados SQL CLR conforme mencionado abaixo. Adicione uma referência ao NCache montagem que você criou na última etapa. A montagem que você precisa consultar está destacada acima. Ele aparecerá no SQL Server com o mesmo nome que “NCache".
  5. Usando procedimentos armazenados CLR para sincronizar NCache com um banco de dados
  6. Escreva seu procedimento armazenado. Aqui está um código de exemplo fornecido:
  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 a integração CLR no banco de dados conforme indicado abaixo:
  9. sp_configure 'clr enabled', 1
    GO
    RECONFIGURE
    GO
  10. Implante o procedimento armazenado do Visual Studio e teste-o.
  11. Depois de implantar o procedimento armazenado, você precisa colocar o assembly do procedimento armazenado em (C:\Program Files\NCache\bin\assembly\2.0), pois não resolve referências de assembly diretamente da pasta Windows GAC e precisa delas localmente.

Os procedimentos armazenados ou gatilhos baseados em CLR podem melhorar muito o desempenho do aplicativo em comparação com o SqlCacheDependency que é relativamente mais lento e pode ser esmagador para grandes conjuntos de dados.


O que fazer a seguir?

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