テスターですが何か?

ホビープログラマ略してHPです

【日本語訳】Building Windows Azure Applications with the Caching Service part6

leave a comment »

このエントリーはMSDNのチュートリアル「Building Windows Azure Applications with the Caching Service」の「Exercise2: Caching Data with Windows Azure Caching」の日本語訳になります。このコンテンツ、日本語訳全体については、こちらのエントリーを参照してください。

Exercise 2: Caching Data with Windows Azure Caching

このエントリーでは、SQL Azureのクエリ結果をWindows Azure Cachingを利用してキャッシュする方法について学習します。前回のエントリーで使用したソリューションを継続して使用します。異なるのは、ホームページにカタログから商品リスト情報を取得するのにかかった時間を表示するように変更するのと、キャッシュを利用する/しないを設定するリンクを追加することです。

このチュートリアルでちょっとしたキャッシュ機能の実装でデータアクセス部分のコードを更新します。標準的なパターンを使用して、最初にクエリ結果がキャッシュに存在するかチェックを行い、キャッシュにデータがなければ、キャッシュを行うためにデータベースに対してクエリを実行します。

Task 1 – Caching Data Retrieved from the SQL Azure Repository

Windows Azure Caching Serviceを利用するためには、まずDataCacheFactoryオブジェクトを作成する必要があります。このオブジェクトはプログラム内で記述されている、または、設定ファイルから読み込みを行い、キャッシュクラスタの接続先を決定します。一般的にはファクトリークラスのインスタンスを作成し、アプリケーションの稼動している間は同じオブジェクトを使用します。キャッシュにデータを格納するには、DataCacheFactoryからDataCacheインスタンスを要求し、キャッシュへアイテムの追加、読み込みを行います。

このエントリーでは、Windows Azure Cachingを使用してSQL Azureへのクエリ結果をキャッシュするようにデータアクセス部分のコードを変更します。

1.Visual Studio 2010を管理者として起動します。

2.「Source\Ex2-CachingData\Begin」ディレクトリにある、Beginソリューションを開きます。

Note: 【重要】ソリューションを実行する前に、スタートアッププロジェクトが設定されていることを確認してください。MVCプロジェクトでスタートページは空白に設定されていなければなりません。

スタートアッププロジェクトの設定は、ソリューションエクスプローラーで AzureStoreService プロジェクトを右クリックし、[スタートアッププロジェクトに設定]を選択します。

スタートページの設定は、ソリューションエクスプローラーでMVCAzureStoreプロジェクトを右クリックし、[プロパティ]を選択します。プロパティウィンドウにて[Web]タグを選択し、[スタートアクション]で[特定のページ]を選択し、値を空白に設定します。

3.Web.configファイルでNorthwindEntities接続文字列があなたのデータベースを指定するように更新します。[YOUR-SQL-AZURE-SERVER-ADDRESS]、[SQL-AZURE-USERNAME]、[SQL-AZURE-PASSWORD]をそれぞれセットアップの手順でポータルからデータベースを作成した際に登録したSQL Azureのサーバー名、管理者ユーザー名、管理者パスワードに置き換えてください。

Note: Northwind2データベースのコピーをSQL Azureアカウントに作成し、ファイやウォール設定を行った手順を確認してください。

4.MVCAzureStoreプロジェクトのServiceフォルダにあるProductsRepository.csファイルを開きます。

5.名前空間のインポート「Microsoft.ApplicationServer.Caching」を追加します。

using System;

using System.Collections.Generic;

using System.Linq;

using MVCAzureStore.Models;

using Microsoft.ApplicationServer.Caching;

6.ProductsRepositoryクラスに、キャッシュの利用を制御するbool型のインスタンス変数、コンストラクタ定義とDataCacheFactoryオブジェクトの静的メンバー宣言を追加します。

public class ProductsRepository : IProductRepository

{

    private static DataCacheFactory CashFactory = new DataCacheFactory();

 

    private bool enableCache = false;

 

    public ProductsRepository(bool enableCache)

    {

        this.enableCache = enableCache;

    }

Note: DataCacheFactoryは静的メンバーとして宣言され、アプリケーションが稼動している間利用されます。

7.GetProductsメソッドへ移動し、以下のコードをproductsローカル変数宣言のすぐ下に追加します。

public List<string> GetProducts()

{

    List<string> products = null;

 

    DataCache dataCache = null;

 

    if (enableCache)

    {

try

{

            dataCache = CacheFactory.GetDefaultCache();

            products = dataCache.Get("products") as List<string>;

            if (products != null)

            {

                products[0] = "(from cache)";

                return products;

            }

        }

        catch (DataCacheException ex)

        {

            if (ex.ErrorCode != DataCacheErrorCode.RetryLater)

            {

                throw;

            }

        }

    }

 

    NorthwindEntities context = new NorthwindEntities();

    var query = from product in context.Products

                select product.ProductName;

    products = query.ToList();

 

    return products;

}

Note: 追加したコードはDataCacheFactoryオブジェクトを使用してデフォルトのキャッシュオブジェクトを取得し、キャッシュからキー値「products」を使用してアイテムを取得します。キャッシュに要求されたキーのオブジェクトが存在する場合、リストの最初のエントリーにキャッシュから取得したことを示す文字列をセットし、戻り値として設定します。また、キャッシュからデータを取得できなかった場合に、データソース(SQL Azure)から値を取得できるようにしています。

8.次に、GetProductsメソッド内のメソッドの最後でproductsリストを返している部分の直前に、以下のコードを追加します。

    NorthwindEntities context = new NorthwindEntities();

    var query = from product in context.Products

                        select product.ProductName;

    products = query.ToList();

 

    products.Insert(0, "(from data source");

    if (enableCache && dataCache != null)

    {

        dataCache.Add("products", products, TimeSpan.FromSeconds(30));

    }

 

    return products;

}

Note: 追加したコードはデータソース(SQL Azure)からのクエリ結果をキャッシュに保存し、キャッシュの破棄ポリシーを30秒に設定しています。

次は「Task2 – Measuring the Data Access Latency」です。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。