Verwenden von gespeicherten CLR-Prozeduren zum Synchronisieren NCache mit einer Datenbank

SQL Server bietet einen Ereignisbenachrichtigungsmechanismus, bei dem der verteilte Cache wie NCache kann sich für die Änderungsmitteilung durch registrieren SqlCacheDependency und dann Benachrichtigungen von SQL Server erhalten, wenn sich zugrunde liegende Daten in der Datenbank ändern. Dies erlaubt NCache um das entsprechende zwischengespeicherte Element sofort ungültig zu machen oder neu zu laden, wodurch der Cache immer mit der Datenbank synchronisiert bleibt. Jedoch, SqlCacheDependency kann zu einer sehr ressourcenintensiven Methode zum Synchronisieren des Caches mit der Datenbank werden.

Eine bessere Alternative besteht darin, eine gespeicherte CLR-Prozedur zu schreiben, die eine Verbindung herstellt NCache aus SQL Server heraus und aktualisiert oder macht das entsprechende zwischengespeicherte Element direkt ungültig. Es ist ressourceneffizienter, da es keine verwandten Datenstrukturen erstellt SqlCacheDependency. Außerdem werden keine .NET-Ereignisse ausgelöst NCache. Stattdessen öffnet es eine NCache Client-Verbindung und direkt erzählt NCache ob ein zwischengespeichertes Element ungültig gemacht oder neu geladen werden soll. Und diese Verbindung mit NCache ist hochgradig optimiert und viel schneller und leichter als .NET-Ereignisse.

Hier sind die Schritte zur Verwendung der CLR-Speicherprozedur mit NCache:

  1. Kopieren Sie log4net und protobuf-net von Windows GAC nach NCache/bin/assembly/2.0-Ordner (wählen Sie 4.0, wenn die Zielplattform .NET 4.0 ist).
  2. Registrieren NCache und folgenden Versammlungen im SQL-Server. Beispiel ist unten angegeben. In diesem Beispiel verwenden wir Northwind als Beispieldatenbank.
  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. Öffnen Sie Visual Studio, um eine gespeicherte Prozedur dagegen zu schreiben NCache Und erstellen Sie ein SQL CLR-Datenbankprojekt wie unten erwähnt. Fügen Sie einen Verweis auf die hinzu NCache Assembly, die Sie im letzten Schritt erstellt haben. Die Assembly, auf die Sie verweisen müssen, ist oben hervorgehoben. Es erscheint unter SQL Server mit dem gleichen Namen wie „NCache".
  5. Verwenden von gespeicherten CLR-Prozeduren zum Synchronisieren NCache mit einer Datenbank
  6. Schreiben Sie Ihre gespeicherte Prozedur. Hier ist ein Beispielcode angegeben:
  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. Aktivieren Sie die CLR-Integration in der Datenbank wie unten angegeben:
  9. sp_configure 'clr enabled', 1
    GO
    RECONFIGURE
    GO
  10. Stellen Sie die gespeicherte Prozedur aus Visual Studio bereit und testen Sie sie.
  11. Nachdem Sie die gespeicherte Prozedur bereitgestellt haben, müssen Sie Ihre Assembly der gespeicherten Prozedur in (C:\Program Files\NCache\bin\assembly\2.0) Ordner, da er Assemblyverweise nicht direkt aus dem Windows GAC-Ordner auflöst und sie lokal benötigt.

CLR-basierte gespeicherte Prozeduren oder Trigger können die Anwendungsleistung im Vergleich zu erheblich verbessern SqlCacheDependency das ist relativ langsam und kann bei großen Datasets überwältigend sein.


Was macht man als nächstes?

© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.