SQL Server fornisce un meccanismo di notifica degli eventi a cui piace la cache distribuita NCache può registrarsi per la notifica di modifiche tramite SqlCacheDependency e quindi ricevere notifiche da SQL Server quando i dati sottostanti cambiano nel database. Ciò consente NCache per invalidare o ricaricare immediatamente l'elemento memorizzato nella cache corrispondente, mantenendo così la cache sempre sincronizzata con il database. Tuttavia, SqlCacheDependency può diventare un metodo di sincronizzazione della cache con il database che richiede molte risorse.
Un'alternativa migliore prevede la scrittura di una stored procedure CLR che si connette a NCache dall'interno di SQL Server e aggiorna o invalida direttamente l'elemento memorizzato nella cache corrispondente. È più efficiente in termini di risorse perché non crea strutture dati correlate a SqlCacheDependency. Inoltre, non attiva eventi .NET per 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.
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
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 ...");
}
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
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ò risultare inadeguato per set di dati di grandi dimensioni.
© Copyright Alachisoft 2002 - . Tutti i diritti riservati. NCache è un marchio registrato di Diyatech Corp.