CLR 저장 프로시저를 사용하여 동기화 NCache 데이터베이스로

SQL Server는 분산 캐시와 같은 이벤트 알림 메커니즘을 제공합니다. NCache 통해 변경 알림에 등록할 수 있습니다. SqlCacheDependency 그런 다음 데이터베이스에서 기본 데이터가 변경될 때 SQL Server로부터 알림을 받습니다. 이를 통해 NCache 해당 캐시 항목을 즉시 무효화하거나 다시 로드하면 캐시가 항상 데이터베이스와 동기화됩니다. 하지만, SqlCacheDependency 캐시를 데이터베이스와 동기화하는 매우 리소스 집약적인 방법이 될 수 있습니다.

더 나은 대안은 다음과 연결되는 CLR 저장 프로시저를 작성하는 것입니다. NCache SQL Server 내에서 해당 캐시 항목을 직접 업데이트하거나 무효화합니다. 관련된 데이터 구조를 생성하지 않기 때문에 더 자원 효율적입니다. SqlCacheDependency. 또한 .NET 이벤트를 실행하지 않습니다. NCache. 대신, 다음을 엽니다. NCache 클라이언트 연결 및 직접 알려줍니다 NCache 캐시된 항목을 무효화할지 다시 로드할지 여부. 그리고, 이 연결은 NCache 고도로 최적화되었으며 .NET 이벤트보다 훨씬 빠르고 가볍습니다.

다음은 CLR 저장 프로시저를 사용하는 단계입니다. NCache:

  1. Windows GAC에서 log4net 및 protobuf-net을 다음으로 복사 NCache/bin/assembly/2.0 폴더(대상 플랫폼이 .NET 4.0인 경우 4.0 선택).
  2. 회원가입 NCache 그리고 다음 어셈블리 SQL 서버에서. 아래에 예가 나와 있습니다. 이 예에서는 Northwind를 샘플 데이터베이스로 사용하고 있습니다.
  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. 저장된 프로시저를 작성하기 위해 Visual Studio를 엽니다. NCache 그리고 아래와 같이 SQL CLR 데이터베이스 프로젝트를 생성합니다. 에 대한 참조를 추가합니다. NCache 마지막 단계에서 생성한 어셈블리. 참조해야 하는 어셈블리는 위에 강조 표시되어 있습니다. "와 같은 이름으로 SQL Server 아래에 나타납니다.NCache".
  5. CLR 저장 프로시저를 사용하여 동기화 NCache 데이터베이스로
  6. 저장 프로시저를 작성하십시오. 다음은 주어진 샘플 코드입니다.
  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. 아래와 같이 데이터베이스에서 CLR 통합을 활성화합니다.
  9. sp_configure 'clr enabled', 1
    GO
    RECONFIGURE
    GO
  10. Visual Studio에서 저장 프로시저를 배포하고 테스트합니다.
  11. 저장 프로시저를 배포한 후 저장 프로시저 어셈블리를 (C:\Program Files\NCache\bin\assembly\2.0) 폴더는 Windows GAC 폴더에서 직접 어셈블리 참조를 확인하지 않고 로컬에서 필요하기 때문입니다.

CLR 기반 저장 프로시저 또는 트리거는 응용 프로그램 성능을 크게 향상시킬 수 있습니다. SqlCacheDependency 이는 상대적으로 느리고 대규모 데이터 세트의 경우 압도적일 수 있습니다.


다음에 무엇을할지?

© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.