特集 初めてのWindows Azureテーブル・ストレージ開発 野村総合研究所 勇 大地2009/12/22 |
Page1
Page2
|
Azure関連の記事
●まだ知らない人のための最新Azure入門 - Build Insider
●ここまで進化した、Azure Webサイトの世界観(2014年7月版) - Build Insider
●連載:Windows Azureモバイルサービスで作る簡単スマートフォンアプリ - Build Insider
●Microsoft Azureプレビュー・ポータルの機能とは? - Build Insider
●特集:Windows Azureメディア・サービスを利用したストリーミング配信 - Build Insider
●連載:Microsoft技術におけるアイデンティティ連携開発のいま - Build Insider
●Vittorio Bertocci氏インタビュー: 開発者にとってのWindows Azure Active Directoryの役割と今後の展開 - Build Insider
●その知識、ホントに正しい? Windowsにまつわる都市伝説(6):Microsoft Azureの秘密を探る[その1] - @IT
■1. Windows Azureストレージの概要
本稿では、Windows Azureにおけるストレージ環境である「Windows Azureストレージ」の概要と、同環境における開発例および開発の注意点について紹介する。
本稿は以下の開発環境を前提としている。特にWindows Azure SDK(Software Development Kit)のバージョンには注意していただきたい(現時点では、これらはすべて無償でダウンロード可能である)。
- Visual Studio 2010 Beta 2
- Windows Azure Software Development Kit(November 2009)(以下、November 2009 SDK)
今回の前編では、Windows Azureストレージの概要と、従来のリレーショナル・データベース(以下、RDB)との違いについて解説する。また、Windows Azureストレージのテーブルを用いたコーディング例を示し、活用する際のポイントを述べる。次回となる後編では、Windows Azureストレージのブロブやキューの実装方法を紹介する。
●Windows Azureストレージとは
Windows Azureでは、利用可能なストレージ・サービス(=データを保存する仕組み)の1つとして、Windows Azureストレージが提供されている(※また、SQL AzureというRDBサービスも提供されている。これについての詳細は後述)。
Windows Azureストレージのアーキテクチャは、従来のストレージ環境やRDBとは大きく異なる。従来のストレージ環境では、開発者がハードウェアの追加や運用を行うことで拡張性と可用性を維持していた。しかしWindows Azureストレージでは、既存のファイル・システムと異なるアーキテクチャで提供することで拡張性と可用性を担保している。従って、その拡張性と可用性を生かすには、Windows Azureストレージのアーキテクチャや特性を理解したうえで開発を行うことが不可欠である。
●テーブル、ブロブ、キューとは
Windows Azureストレージは、テーブル、ブロブ、キュー、ドライブと呼ばれる4つのストレージ・サービスを提供している(※ドライブは2010年2月から提供予定)。
分類 | ストレージ名 | 概要 |
Windows Azureストレージ | テーブル | 分散Key-Valueストア |
ブロブ | 大容量バイナリ格納 | |
キュー | ロール間のメッセージ受け渡し領域 | |
ドライブ | NTFSボリューム(※2010年2月から提供予定) | |
Windows Azureで提供されるストレージ・サービス |
これらのストレージ・サービスは、次の図に示すように、Windows Azureの「Webロール」(=Webアプリケーション)や「Workerロール」(=バックグラウンド処理)などのアーキテクチャや特性に応じて使い分けられる。
Windows Azureストレージ・サービス(テーブル、ブロブ、キュー)の活用イメージ |
以下では、ドライブを除くストレージ・サービスの、テーブル、ブロブ、キューについてもう少し詳しく解説しよう。
○テーブル(Table)
表形式の構造を持ったデータの格納に利用できる。ただし、テーブル・ストレージは、RDBにおける「テーブル」とは構造が異なるストレージであり、クラウドで広く利用されている「分散Key-Valueストア」である。分散Key-Valueストアとは、「キー」と「値」のペアからなるストレージのことで、代表的なものにグーグルが提供する「Bigtable」などがある。
データ構造がシンプルなため、分散化や高可用性の実現に適しているが、逆にRDBが得意とする複雑な検索・集計やトランザクション処理は得意ではない。テーブル・ストレージを利用した開発を行う場合、分散Key-ValueストアとRDBの、この特徴の違いを理解することが重要なポイントとなる。
※本稿では分散Key-Valueストアについて詳細な解説はしない。詳しくは、別途「もう1つの、DBのかたち、分散Key-Valueストアとは」を参照のこと。
○ブロブ(BLOB:Binary Large OBject)
名前の示すとおり、大容量のバイナリ・データを格納するために利用され、3つのストレージのうち最もシンプルなストレージである。単純な構成を持つファイル・システムのようなもので、主に画像や動画などのバイナリ・データの保存に利用できる。
ブロブ・ストレージでは、最大1TByteまでファイルをアップロード可能である。また、WebロールやWorkerロールのログもブロブ・ストレージに保存される。
○キュー(Queue)
ブロブ・ストレージやテーブル・ストレージのようにデータを格納するための用途でなく、WebロールとWorkerロールの間でのデータ受け渡しに利用されるストレージである。
例えば、サービス利用者からのリクエストをWebロールで受け取り、データをキューに書き込み、Workerロールで処理を実行するといった用途で利用できる。Webロール、Workerロール、キューをうまく組み合わせることで、一連の処理を非同期に効率よく行うことができる。
テーブル/ブロブ/キュー・ストレージの概要と最大容量を、下の表にまとめる。ブロック・ブロブとページ・ブロブの違いは後編で説明する。
ストレージの種類 | 用途 | 最大容量 |
テーブル | 非RDBの分散Key-Valueストアであり、表形式の構造を格納できる | 1エンティティ当たり1MByteまで |
ブロブ | 画像や音声などの大容量バイナリ・データを格納できる | 1ブロブ当たり、ブロック・ブロブは200GByteまで、ページ・ブロブは1TByteまで(メタデータは8KByteまで) |
キュー | ロール間におけるメッセージの受け渡しに利用できる | 1メッセージ当たり8KByteまで |
Windows Azureストレージにおける、各ストレージの概要 |
●SQL Azureとのすみ分け
クラウドにおけるストレージは、Windows Azureストレージのテーブルでも採用されている分散Key-Valueストアが主流となっている。しかし、現在も広く活用されているRDBは当面利用が続くと考えられ、開発者も「RDBの開発」から「分散Key-Valueストアの開発」にそのまま移行できるわけではない。
前述したとおり、分散Key-Valueストアでは、分散処理や可用性担保が容易である一方で、RDBが得意なテーブルとテーブルを結合する処理や、複雑な条件検索や集計処理を簡単に行うことができない。また、トランザクションによる「ACID特性」(=「原子性:Atomic」「一貫性:Consistent」「独立性:Isolated」「持続性:Durable」の4特性)の確保もアプリケーション開発者のスキルに依存することになる。
そうした問題に対応するため、マイクロソフトはクラウド上のRDBサービスとしてSQL Azure(=SQL Serverのクラウド版)を提供している。SQL Azureを活用するシナリオとしては以下が考えられる。
- RDBなどに格納されている既存資産のデータを、そのままWindows Azureのサービスで利用する場合
- Windows Azureのスケーラブルな環境を利用し、ストレージ・アクセスは従来の開発手法で行う場合
■2. Windows Azureストレージ開発の基礎知識
実際にWindows Azureストレージの開発を始める前に、Windows Azureストレージ開発の基礎知識を説明しておこう。
●2種類のストレージ・アクセス手法
Windows Azureストレージにアクセスするインターフェイスは、次の2つが提供されている。
- REST形式:Windows AzureストレージAPIを直接呼び出す方法
- ADO.NET形式:Windows Azureマネージ・ライブラリを使う方法
本稿ではADO.NET形式でのストレージ・アクセスについて取り扱う。
●ローカル環境でのストレージ開発
November 2009 SDKによりインストールされるWindows Azureのローカル開発環境には、本番のWindows Azureストレージとは別に、ローカル環境における開発用ストレージである「Development Storage」が存在する。[スタート]メニューから[すべてのプログラム]−[Windows Azure SDK v1.0]−[Development Storage]を選択すると、そのDevelopment Storageのアプリケーションが開始される。
この状態で、Windowsタスクバーの通知領域にあるWindows Azureのアイコンを右クリックし、表示されるコンテキスト・メニューから[Show Development Storage UI]を実行すると、Development Storage UIを起動できる。これにより、ローカル環境の各ストレージの状態(=「Running:実行中」や「Stopped:停止中」など)とエンドポイント(=URLアドレス)を確認できる。
ローカル環境における開発用ストレージのUI画面である「Development Storage UI」 |
※本稿では主にDevelopment Storageにおけるストレージ開発を取り扱う。 |
●Windows Azureクラウド・サービスのソリューションの作成手順
Windows Azureストレージを利用する前に、Windows Azureクラウド・サービスを実装するソリューションの作成手順についても再確認しておこう。
Visual Studioを起動し、メニューバーから[ファイル]−[新規作成]−[プロジェクト]を選択して[新しいプロジェクト]ダイアログを起動する。[プロジェクトの種類]から[Cloud Service]を選択し、[テンプレート]から[Windows Azure Cloud Service]を選択する。
[新しいプロジェクト]ダイアログ |
※Windows Azureは.NET Framework 3.5で動作しているため、デフォルトの.NET Framework 4.0から変更すること。 |
これにより、[New Cloud Service Project]ダイアログが表示されるので、ソリューションに加えるロールを追加する。下の画面例では、C#の「ASP.NET Web ロール」と「Workerロール」を追加した。ここで[OK]ボタンを選択すると、ソリューションが作成される。
[New Cloud Service Project]ダイアログ |
●Development Storageにアクセスするための基本設定
以下で紹介する設定内容は、本稿で解説する開発手順を実施するために必要である。
[ソリューション エクスプローラー]で、クラウド・サービスのプロジェクト(この例では「QueueConfirmCloudService」)の「Roles」フォルダ内のロール(この例では「WebRole1」もしくは「WorkerRole1」)をダブルクリックして、各ロールついての設定を行うプロパティ・ページを開く。
[ソリューション エクスプローラー]で設定を変更するロールを選択 |
ロールに対する設定を行うプロパティ・ページが表示されたら、[Settings]タブを選択し、各ロールに対してDevelopment Storageにアクセスするための設定(=下の表の内容)を追加する。追加するには、プロパティ・ページ上部の[Add Setting]をクリックする。
パラメータ | 値 |
Name | DataConnectionString |
Type | ConnectionString |
Value | UseDevelopmentStorage=true |
ロールの情報を設定 | |
※本番のWindows Azureストレージにアクセスするためには、別途、Windows Azure開発者ポータル・サイトにアクセスして、Windows Azureストレージ・アカウントを取得する必要がある。 |
この設定により、クラウド・サービス構成定義ファイル(.csdef)やクラウド・サービス構成設定ファイル(.cscfg)に設定が追加される。
●Development Storageにアクセスする構成設定のセットアップ
先ほどの作業によりクラウド・サービス構成設定ファイル(.cscfg)内に設定されたストレージ・アクセスの情報を活用するには、基本的にCloudStorageAccount.FromConfigurationSettingメソッド(詳細後述)を使用する。このメソッドを利用するには構成設定パブリッシャのセットアップが必要になる。
Visual StudioでWebロールやWorkerロールのプロジェクトを作成すると、WebRole.cs/WebRole.vbやWorkerRole.cs/WorkerRole.vbというソース・ファイルが自動生成され、そのファイル内ではRoleEntryPointクラス(Microsoft.WindowsAzure.ServiceRuntime名前空間)を継承したWebRoleクラスやWorkerRoleクラスが作成されている。これらのクラス内では、ロール・インスタンスの起動時に呼び出されるOnStartメソッドがオーバーライドされている。
このOnStartメソッドに、構成設定パブリッシャのセットアップを記述する。具体的には、次のコードの「CloudStorageAccount構成設定パブリッシャのセットアップ」の部分を追記する。なおRoleEnvironmentChangingメソッド(=RoleEnvironmentクラスのChangedイベント・ハンドラ)は(下記のコードで実装しているので)削除してよい。
|
||
OnStartメソッドにおける構成設定パブリッシャ・セットアップのコード例(上:WebRole.cs/WorkerRole.cs、下:WebRole.vb/WorkerRole.vb) | ||
Visual Basic 9の場合は複数行のラムダ式が使えないため、別関数に分けて記述している。 |
以上で準備は完了だ。
それでは、実際にWindows Azureストレージを利用した開発例を紹介していこう。
INDEX | ||
特集:Windows Azureストレージ開発入門(前編) | ||
初めてのWindows Azureテーブル・ストレージ開発 | ||
1.Windows Azureストレージの概要 | ||
2.Windows Azureテーブル・ストレージでの開発 | ||
特集:Windows Azureストレージ開発入門(後編) | ||
初めてのブロブ&キュー・ストレージ開発 | ||
3.Windows Azureブロブ・ストレージでの開発 | ||
4.Windows Azureキュー・ストレージでの開発 | ||
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
キャリアアップ
未来展望台コーナースポンサーからのお知らせ
- - PR -
- - PR -
転職/派遣情報を探す
「ITmedia マーケティング」新着記事
プログラマティック広告はどう変化? 米国レポートから見える「今後の動向」
CTVとプライベートマーケットプレイスへの広告支出のシフトにより、米広告業界ではプログ...
「顧客体験」の重要性高まる 2024年「CX」関連の人気記事TOP10を紹介
今回の記事では、2024年「ITmedia ビジネスオンライン CX Experts」のアクセスランキング...
SNSの情報がアルゴリズムで最適化されていることを「知らない」が6割超 年代別では?
ロイヤリティ マーケティングは、10〜60代のSNS利用者を対象に、SNS情報の信用度に関する...