連載:VS 2005でいってみようDBプログラミング

第12回 DBプログラミング 7つのヒント
− 同時実行制御からASP.NET AJAXまで −

山田 祥寛(http://www.wings.msn.to/
2007/01/27
Page1 Page2 Page3 Page4

Hint 7. データベース・キャッシングを活用するには?

 第3回第11回でも紹介したように、ASP.NETにおける特徴の1つとして、キャッシュ機能が充実している点が挙げられます。ASP.NETのキャッシュ技術を利用することで、動的ページのキャッシュ処理を限りなくプログラムレスで実現することができます。

 もっとも、ASP.NET 1.xのキャッシュ技術には、1つ致命的ともいえる問題があったのも事実です。というのも、データベースに対してキャッシュ・データの依存関係を設定できなかった点です。

 このため、データベースから取得したデータを基にキャッシュ・データを生成している場合、アプリケーション開発者は、データベース上のデータとキャッシュ・データとの整合関係を維持するために、いささかトリッキーな手法を取る必要があったわけです(詳細については「.NET TIPS:[ASP.NET]データベース更新のタイミングでキャッシュを破棄するには?」を参照してください)。アプリケーションで利用しているデータの多くが、データベース・サーバを基にしていることを考えれば、これはやや貧弱な仕様だったといえるでしょう。

 しかし、ASP.NET 2.0では新たに「データベース・キャッシング」と呼ばれる機能が追加されました。これによって、データベースを変更するタイミングでのキャッシュ更新を、いくつかの事前設定とディレクティブ構文の記述のみで実現できるようになります。

 データベース・キャッシング機能を利用するには、データベース・サーバ/アプリケーション構成ファイルに対して、あらかじめ以下のような設定を行っておく必要があります。なお、データベース・キャッシング機能を利用できるのは、SQL Server 7.0以降の環境に限定されますので、注意してください。

[1]データベース・キャッシング機能を有効化する

 データベース・キャッシング機能を有効化するには、.NET Framework標準で提供されているコマンドライン・ツールであるaspnet_regsql.exeを使用する必要があります。

 aspnet_regsql.exeは「C:\Windows\Microsoft.NET\Framework\<バージョン番号>」フォルダに含まれていますので、カレント・フォルダを移動したうえで、コマンド・プロンプトから、以下の要領でコマンドを入力してください。

 なお、ここではデータベース名が「DBMag」、キャッシュ機能を有効にしたいテーブル名が「books」であると仮定して解説を進めます。

> aspnet_regsql.exe -S .\SQLEXPRESS -E -d DBMag -ed
> aspnet_regsql.exe -S .\SQLEXPRESS -E -d DBMag -t books -et
データベース・キャッシング機能を有効化するためのコマンド
データベース名が「DBMag」、キャッシュ機能を有効にしたいテーブル名が「books」である場合。

 成功のメッセージが表示されれば、データベース・キャッシング機能の有効化は完了です。

[Note]データベース・ファイルのアタッチ

 データベース・キャッシング機能を利用するには、あらかじめデータベース・ファイル(「.mdf」ファイル)をSQL Serverにアタッチしておく必要があります。

  データベースをアタッチするには、サーバ・エクスプローラのコンテキスト・メニューから[接続の追加]を選択し、[接続の追加]ダイアログから以下の要領で必要な情報を入力します。

図10 [接続の追加]ダイアログ
アタッチするデータベース・ファイルとデータベース名を指定する。


[2]アプリケーション構成ファイルにデータベースを登録する

 次に、キャッシュ対象となるデータベースをアプリケーションに登録します。

 例えば、接続名「MyDBCache」で定義されたデータベースを登録するには、次のリスト8のように記述してください。MyDBCacheは、データベースDBMagに接続するための定義情報です(接続情報についての詳細は、第2回を参照してください)。

<?xml version="1.0" ?>
<configuration>
  ……中略……
  <connectionStrings>
    ……中略……
  <add name="MyDBCache" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DBMag;Integrated Security=True"
    providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    ……中略……
    <caching>
      <sqlCacheDependency enabled="true" pollTime="5000">
        <databases>
          <add name="MyCache" connectionStringName="MyDBCache" />
        </databases>
      </sqlCacheDependency>
    </caching>
    ……中略……
  </system.web>
</configuration>
リスト8 キャッシュ対象となるデータベースを登録したWeb.config(抜粋)
ここではデータベース「DBMag」に接続するための接続名「MyDBCache」を用いて、キャッシュ対象となるデータベースを指定している。

 データベース・キャッシング機能を有効にするのは、<sqlCacheDependency>要素のenabled属性の役割です。pollTime属性はキャッシュ対象のテーブルに対して変更をポーリングする時間間隔をミリ秒単位で指定します。デフォルトは1分で、500ミリ秒未満の設定はできません。

 具体的な対象データベースの登録は、<databases>/<add>要素に記述します。name属性にはキャッシュの定義名として任意の文字列を、connectionStringName属性には対象データベースへの接続名をそれぞれ指定します。connectionStringName属性の値は、<connectionStrings>/<add>要素のname属性であらかじめ定義された値に対応している必要があります。

[3]@OutputCacheディレクティブでキャッシュ規則を宣言する

 最後に、データベース・キャッシング機能を利用するページ上で、以下のように「@OutputCacheディレクティブ」を指定します。@OutputCacheディレクティブは、その名のとおり、出力キャッシュにかかわる挙動を指定するためのディレクティブです。

<%@ OutputCache Duration="600" VaryByParam="None"
                SqlDependency="MyCache:books" %>
リスト9 データベース・キャッシング機能を有効化する@OutputCacheディレクティブ(GriViewCache.aspx)

 Duration属性はキャッシュの有効期限を、VaryByParam属性はキャッシュを識別するためのキーとなるリクエスト・パラメータの名前を、そして、SqlDependency属性はデータベース・キャッシングのキーを、それぞれ指定します。SqlDependency属性には、Web.configで記述した内容に基づいて、「キャッシュ定義名:テーブル名」の形式で記述します。

 以上で、データベース・キャッシングを利用する準備は完了です。以下に、データベース・キャッシング機能を有効にしたGridViewコントロールの実行例を見てみましょう(配布サンプルでは、GridViewCache.aspxから実行できます)。



『独習ASP.NET』の価格データをテーブル上で直接編集してからリフレッシュ

図11 データベース・キャッシング機能を有効化したページ
ページを再読み込みするだけではキャッシュが有効になっているため現在時刻表示は変わらないが、テーブルのデータを変更した後に再読み込みすると現在時刻表示が更新されているのを確認できる。

 ここでは、キャッシュが有効化されていることを確認するために、GridViewコントロールの上部に現在時刻を表示するようにしています。まずはページを再読み込みしても、現在時刻が変更されていないこと(キャッシュが有効化されていること)を確認してください。

 次に、キャッシュ元のbooksテーブルを変更したうえで、ページをリフレッシュすると、GridViewコントロールにその変更が反映され、現在時刻も更新されることが確認いただけるはずです。

 以上、全12回でお送りしたデータベース・プログラミング入門もこれで終了です。

 もちろん、.NET Frameworkで実現できるデータベース連携はまだまだ奥が深く、たかだか12回では語りつくせなかったテーマも多くあります。ぜひ、本稿を1つの手掛かりに、さらなる学習のステップアップとしてください。本稿が、導入のまず第一歩を踏み出す手掛かりとなれば幸いです。End of Article

 

 INDEX
  Visual Studio 2005でいってみようDBプログラミング
  第12回 データベース・プログラミング 7つのヒント − 同時実行制御からASP.NET AJAXまで −
    1.Hint 1.競合の検出/Hint 2. 楽観的同時実行制御の問題点とその解決方法
    2.Hint 3. GridViewページング・ソート処理の高速化/Hint 4. 「ASP.NET AJAX」の利用
    3.Hint 5. UpdatePanelコントロールによる高速化/Hint 6. Timerコントロールによる更新
  4.Hint 7. データベース・キャッシングの活用
 
インデックス・ページヘ  「Visual Studio 2005でいってみようDBプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間