Utilisation des procédures stockées CLR pour la synchronisation NCache avec une base de données

SQL Server fournit un mécanisme de notification d'événement où le cache distribué comme NCache peut s'enregistrer pour la notification de changement via SqlCacheDependency puis recevez des notifications de SQL Server lorsque les données sous-jacentes changent dans la base de données. Ceci permet NCache pour invalider ou recharger immédiatement l'élément en cache correspondant et cela maintient le cache toujours synchronisé avec la base de données. Cependant, SqlCacheDependency peut devenir un moyen très gourmand en ressources de synchroniser le cache avec la base de données.

Une meilleure alternative consiste à écrire une procédure stockée CLR qui se connecte à NCache depuis SQL Server et met à jour ou invalide directement l'élément mis en cache correspondant. Il est plus économe en ressources car il ne crée pas de structures de données liées à SqlCacheDependency. Et, il ne déclenche pas non plus d'événements .NET pour NCache. Au lieu de cela, il ouvre une NCache connexion client et indique directement NCache s'il faut invalider un élément mis en cache ou le recharger. Et, ce lien avec NCache est hautement optimisé et beaucoup plus rapide et léger que les événements .NET.

Voici les étapes à suivre pour utiliser la procédure de magasin CLR avec NCache:

  1. Copiez log4net et protobuf-net de Windows GAC vers NCache/bin/assembly/2.0 dossier (choisissez 4.0 si la plate-forme cible est .NET 4.0).
  2. Inscription NCache et montages suivants dans le serveur SQL. Un exemple est donné ci-dessous. Dans cet exemple, nous utilisons Northwind comme exemple de base de données.
  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. Ouvrez Visual Studio pour écrire une procédure stockée contre NCache Et créez un projet de base de données SQL CLR comme mentionné ci-dessous. Ajouter une référence au NCache l'assemblage que vous avez créé à la dernière étape. L'assembly auquel vous devez vous référer est mis en surbrillance ci-dessus. Il apparaîtra sous SQL Server avec le même nom que "NCache ».
  5. Utilisation des procédures stockées CLR pour la synchronisation NCache avec une base de données
  6. Écrivez votre procédure stockée. Voici un exemple de code donné :
  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. Activez l'intégration CLR sur la base de données comme indiqué ci-dessous :
  9. sp_configure 'clr enabled', 1
    GO
    RECONFIGURE
    GO
  10. Déployez la procédure stockée à partir de Visual Studio et testez-la.
  11. Après avoir déployé la procédure stockée, vous devez placer votre assembly de procédure stockée dans (C:\Program Files\NCache\bin\assembly\2.0) car il ne résout pas les références d'assembly directement à partir du dossier Windows GAC et en a besoin localement.

Les procédures stockées ou les déclencheurs basés sur le CLR peuvent grandement améliorer les performances de l'application par rapport aux SqlCacheDependency c'est relativement plus lent et peut être écrasant pour les grands ensembles de données.


Que faire ensuite?

© Copyright Alachisoft 2002 - . Tous droits réservés. NCache est une marque déposée de Diyatech Corp.