CLR ストアド プロシージャを使用した同期 NCache データベース付き

SQL Server は、次のような分散キャッシュによるイベント通知メカニズムを提供します。 NCache を通じて変更通知のために自分自身を登録することができます SqlCacheDependency 次に、データベース内の基になるデータが変更されたときにSQLServerから通知を受け取ります。 これにより、 NCache 対応するキャッシュされたアイテムをすぐに無効化または再ロードします。これにより、キャッシュは常にデータベースと同期されます。 でも、 SqlCacheDependency キャッシュをデータベースと同期するには、非常にリソースを大量に消費する方法になる可能性があります。

より良い代替案には、CLR ストアド プロシージャを作成して、 NCache SQL Server 内からアクセスし、対応するキャッシュされた項目を直接更新または無効にします。 関連するデータ構造を作成しないため、リソース効率が高くなります。 SqlCacheDependency。 また、.NETイベントを発生させません NCache。 代わりに、 NCache クライアント接続と直接伝える NCache キャッシュされたアイテムを無効にするか再ロードするか。 そして、このつながりは、 NCache は高度に最適化されており、.NET イベントよりもはるかに高速かつ軽量です。

CLR ストア プロシージャを使用する手順は次のとおりです。 NCache:

  1. log4net と protobuf-net を Windows GAC から 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 - . All rights reserved. NCache はダイヤテック株式会社の登録商標です。