はじめに
今回は、Windows Azure Platformにおいて、クラウド上のデータベース機能を提供する「SQL Azure」について扱います。そして、SQL Azureの中核となるSQL Azure Databaseを使ってサンプルアプリケーションを作成してみます。
対象読者
- Windows Azureに興味がある方
- SQL Azureに興味がある方
- SQL Azure Databaseを使用してアプリケーションを開発したい方
必要な環境
シリーズ第1回、第2回を参考にして、Windows Azureの開発環境のインストール、そしてクラウド環境に配置するために必要なAzure Services Developer Portalのアカウント作成とトークン取得を行ってください。
さらに、サンプルでは最初にSQL Serverにアクセスするアプリケーションを作成しますので、SQL Server 2005または2008をインストールしてください。本稿では無償エディションのSQL Server 2008 Expressの使用を前提に話を進めます。
SQL Azureの概要
SQL Azureは、Windows Azure Platformに含まれるビルディングブロックの一つで、SQL Serverの技術をベースにしてクラウド上にリレーショナルデータベース機能を提供するサービスです。
そして、SQL Azureの中で、データベース本体の機能を提供するのがSQL Azure Databaseです。図1にあるように、SQL Azureにはそれ以外にも、Reporting(レポーティング)、Business Intelligence(BI)、Data Sync(データ同期)などの機能が含まれます。これらの機能は、将来のバージョンで順次リリース予定となっています。
なお、2009年7月に名称が変更され、それまでのSQL ServicesからSQL Azureに、そして、SQL Data ServicesからSQL Azure Databaseにと、クラウドを連想させるより直感的な名称となりました。
SQL Azureの主な機能について説明します。
- リレーショナルデータモデル
- Transact-SQLのサポート
- データアクセス
リレーショナルデータモデル
2009年8月に、SQL Azure Database August CTPがリリースされました(その後、2009年10月にSQL Azure Database October CTPがリリース)。このリリースにより、それまでの非リレーショナルなデータモデルが大幅に変更され、多くの開発者にとって待望だったリレーショナルデータベースを扱うことができるようになりました。
これにより、SQL Serverを使用しているデータベースアプリケーションを、多くの修正を必要とすることなく、クラウド上のSQL Azureに対応させることができるようになります。Windows Azure Storageの場合と同様に、クラウドか(ローカル環境も含め)オンプレミスかを問わずどのアプリケーションからでも、SQL Azureにアクセスすることができるのです。
2009年8月のリリースにより、SQL Azureのデータモデルは、従来のACEモデルからリレーショナルモデルへと大幅に変更されました。
これまでは、Authority(オーソリティ)、Container(コンテナ)、Entity(エンティティ)で構成されるACEモデルと呼ばれるデータモデルを採用していました。ACEモデルは、Key-Value型のデータストアの一種で、シリーズ第3回でも取り上げたWindows Azure Storageのテーブルストレージともよく似たデータモデルとなっています。
しかし、多くの開発者が望んでいたのは、慣れ親しんだSQLによるアクセス可能なクラウド版のSQL Serverでした。このような圧倒的な声に答える形で、SQL Azureのデータモデルの大幅な変更がなされ、リレーショナルデータモデルが採用されることになりました。
このようにデータモデルが大幅に変更されたため、以前のACEモデルに基づく情報については、もはや現在のSQL Azureには当てはまらなくなっている可能性が高いことに注意する必要があります。
Transact-SQLのサポート
SQL Serverで使用されているTransact-SQLが、SQL Azureでもサポートされています。しかし、これはSQL ServerのTransact-SQLのサブセットです。主要なSQLステートメント、カーソル、ストアドプロシージャ、トランザクション、トリガ、ビューなど主な機能はサポートあるいは部分的にサポートされています。一方、一部のSQLステートメントやCommon Language Runtime(CLR)などの機能はサポートされていません。
Transact-SQLの主な機能についてのサポート状況を、以下にまとめてみます。
機能 | 説明 | SQL Azureでのサポート |
Cursors | カーソル | サポートまたは部分的サポート |
Local temporary tables | ローカル一時テーブル | サポートまたは部分的サポート |
Stored procedures | ストアドプロシージャ | サポートまたは部分的サポート |
Transactions | トランザクション | サポートまたは部分的サポート |
Triggers | トリガ | サポートまたは部分的サポート |
Tables, joins, and table variables | テーブル,結合 | サポートまたは部分的サポート |
User-defined functions | ユーザー定義関数 | サポートまたは部分的サポート |
Views | ビュー | サポートまたは部分的サポート |
Common Language Runtime (CLR) | 共通言語ランタイム(CLR) | サポート外 |
Database mirroring | データベースミラーリング | サポート外 |
Distributed queries | 分散クエリ | サポート外 |
Distributed transactions | 分散トランザクション | サポート外 |
SQL AzureがサポートするTransact-SQLの詳細については、MSDNライブラリにある次のWebページを参照してください(すべて英文)。
データアクセス
アプリケーションからSQL Azureにアクセスする方法として、従来のADO.NETやODBCドライバを使用できます。これにより、SQL Serverにアクセスする今まで通りの方法で、クラウド上のSQL Azureにもアクセスできます(サンプルでは、ADO.NETを使用してアクセスしてみます)。
加えて、SQL Server Driver for PHP 1.1というPHP用ドライバを使用する方法もあります。PHP開発者であれば、このドライバにより簡単にSQL Azureにアクセスできます。
直接SQL Azureにアクセスするためのツールとしては、コマンドプロンプトから起動するsqlcmdユーティリティがあります。後程サンプルでも扱いますが、sqlcmdを使用してTransact-SQLのステートメントやストアドプロシージャを実行することができます。
SQL Serverと同じように、GUIツールのSQL Server Management Studio(SSMS)は使えないのかと思われるかもしれません。MSDNライブラリの情報によると、現在のリリースでは、SQL Server Management Studioの機能は限定的にしか使用できず、サポート外となっています。筆者が試してみたところ、オブジェクトエクスプローラからの接続はうまく動作せず、直接クエリ画面を開き接続の変更を使用することにより、エラーメッセージが出るもののSQL Azureに接続することができました。