この記事のポイント
- スキーマレス構造でデータ構造を柔軟に定義でき、PartitionKeyとRowKeyによる効率的なデータ管理を実現
- SSE暗号化とRBACによるアクセス制御で企業レベルのセキュリティと冗長化オプションによる高可用性を確保
- CRUD操作、バッチ処理、トランザクション機能により、大規模データの効率的な操作と整合性を保証
- ビッグデータ分析、Webアプリケーション、セッション管理など、幅広いユースケースに対応
- データ保存量と操作回数に基づく透明な料金体系で、コスト効率の高い運用を実現
監修者プロフィール
坂本 将磨
Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。
クラウドストレージサービスを選択する際、スケーラビリティとコスト効率は重要な検討事項となります。
特にビッグデータの時代において、大量のデータを効率的に管理・分析できる環境の構築は、多くの企業にとって課題となっているのではないでしょうか。
本記事では、MicrosoftのクラウドプラットフォームAzureが提供するNoSQLデータベースサービス「Azure Table Storage」について詳しく解説します。スキーマレスな構造による柔軟なデータ管理から、高度なセキュリティ機能、データの複製による可用性の確保まで、その特徴と機能を具体的に紹介します。
さらに、実際の導入手順やデータ操作方法、効果的なユースケース、そして料金体系まで、包括的な情報を提供します。特に、ビッグデータ分析やウェブスケーリング、セッション管理といった実践的な活用シーンについても詳しく説明していきます。
クラウドストレージの選択に悩む企業の方々に、本記事がAzure Table Storageの理解と効果的な活用の一助となれば幸いです。
Azure Table Storage とは
Azure Table Storageは、MicrosoftのクラウドプラットフォームAzureが提供するクラウドストレージサービスの一種です。
通常のリレーショナルデータベースとは異なり、非リレーショナルなデータを管理するNoSQLデータベースなので、柔軟で大規模なデータを処理するのに適しており、開発者が大量のデータを格納・アクセスする際によく用いられています。
AzureTableStrageイメージ図
また、グローバルに分散されたデータセンターに跨る耐久性と可用性を提供し、セキュリティの面でもストレージアカウントレベルでのデータの暗号化をふくむ多層的なセキュリティ機能を備えています。
データ管理の効率化を目指している方や、コストを抑えながら柔軟なデータストレージソリューションを探している方は、本記事をぜひ参考にしてみてください。
Azure Table Storageの特長
まず、Azure Table Storageの特徴についてご紹介します。
スケーラビリティ
Azure Table Storageは、シンプルな形式でデータを保存でき、スキーマレスなので固定のデータ構造に縛られません。そのため、データの種類や形式が変わっても柔軟に対応でき、データ量が増えても簡単に拡張できます。
また、低コストで大規模なデータを扱えるため、リレーショナルデータベースよりも簡単にスケールできるのが特徴です。
パフォーマンス
Azure Table Storageは、多くのデータのやり取りがあっても、コストを抑えながら使えるというのが大きな強みです。頻繁にデータの読み書きを行うシステムやリアルタイムでデータを処理する必要がある場合でも、素早く応答してスムーズに動作します。
Table Storageの概念
Azure Table Storageを理解するためには、その基本概念を把握することが重要です。そこでこのセクションでは基本となるリレーショナルデータベースについて説明した後、Azure Table Storageの概念について説明します。
リレーショナルデータベース
リレーショナルデータベース(RDB:Relational Database)とは、以下のような特徴を持つデータを表(テーブル)の形式で管理するデータベースの一種です。
1. 表(テーブル)形式でのデータ管理
データは表形式で保存されます。表は行(レコード)と列(カラム)で構成され、各列にはデータの種類(名前や年齢など)が決められています。そのため、データを一貫した形式で扱うことができます。
例:顧客情報を管理する表
顧客ID | 名前 | 年齢 |
---|---|---|
001 | 田中 | 35 |
002 | 鈴木 | 28 |
2. データ間の関連付け(リレーション)
リレーショナルデータベースの強みは、異なる表(テーブル)のデータを関連付けることができる点です。
具体例: 顧客テーブルと注文テーブルの関連付け
顧客テーブル
顧客ID | 名前 | 年齢 |
---|---|---|
001 | 田中 | 35 |
002 | 鈴木 | 28 |
注文テーブル
注文ID | 商品名 | 顧客ID |
---|---|---|
1001 | パソコン | 001 |
1002 | カメラ | 002 |
注文テーブルの顧客IDと顧客テーブルの顧客IDを関連付けて、誰がどの注文をしたかを追跡することができます。
3. スキーマによるデータの整合性
リレーショナルデータベースでは、スキーマを使って各列のデータ型や制約をあらかじめ決めます。スキーマとは、テーブルに保存されるデータの構造のルールのことです。
具体例:
以下のようにスキーマを定義します。
- 社員ID: 整数型(数値)
- 名前: 文字列
- 年齢: 整数型(数値)
- 部署: 文字列
スキーマを決めることで、「年齢」に文字を入れようとするとエラーが発生するなど、データの整合性が保たれます。
4. SQL(Structured Query Language)によるデータ操作
リレーショナルデータベースでは、データの検索、挿入、更新、削除などを行うためにSQLという言語を使います。SQLを使うことで、複雑なクエリを実行して効率的にデータを操作できます。
Azure Table Storageのデータの基本概念
Azure Table Storageは、上記の通常のリレーショナルデータベースとは異なり、非リレーショナルなデータを管理するNoSQLデータベースと言われています。
その仕組みは、データをエンティティという単位で管理するというものです。決まったスキーマがないため、自由にデータを保存することができます。
データ構造イメージ
(参考:マイクロソフト)
テーブルデータの構造
Azure Table Storagのテーブルデータについてさらに深く構造を見ていきましょう。
1. エンティティ
エンティティは、データの一つの単位です。たとえば、「顧客情報」を管理する場合、1人の顧客を1つのエンティティとして保存します。
例: 顧客情報を表すエンティティ
{
"PartitionKey": "Japan",
"RowKey": "12345",
"Name": "田中 太郎",
"Age": 35,
"Email": "taro.tanaka@example.com"
}
- プロパティ
プロパティはエンティティの中の個々のデータフィールド*です。
例:
上記エンティティのプロパティは「Name(名前)」「Age(年齢)」「Email(メールアドレス)」などです。
3.PartitionKey と RowKey
PartitionKey と RowKeyは、Azure Table Storageのデータ管理で重要な役割を果たします。
-
PartitionKey:
データをグループ化するために使われます。同じPartitionKeyを持つエンティティは、同じグループにまとめられ、データのアクセスが効率的になります。例えば、PartitionKeyに「顧客の国コード」を使用すると、同じ国の顧客データがグループ化されます。
-
RowKey:
PartitionKey内でエンティティを一意に識別するためのキーです。たとえPartitionKeyが同じでも、RowKeyを使うことで、それぞれの顧客を区別することができます。
例:
PartitionKey: "Japan"(国コード)
RowKey: "12345"(一意な顧客番号)
4.スキーマレスデータ構造
スキーマレスとは、データの構造(フィールドの種類や数)が固定されていないことを意味します。つまり、同じテーブル内で異なるエンティティに異なるプロパティを持たせることができます。
たとえば、以下のような2つのエンティティがあったとします。
エンティティ1:
{
"PartitionKey": "Japan",
"RowKey": "12345",
"Name": "田中 太郎",
"Age": 35,
"Email": "taro.tanaka@example.com"
}
エンティティ2:
{
"PartitionKey": "Japan",
"RowKey": "67890",
"Name": "鈴木 花子",
"PhoneNumber": "090-1234-5678",
"Address": "東京都渋谷区"
}
エンティティ1とエンティティ2は、同じテーブルに保存されていますが、持っているプロパティが異なります。
エンティティ1には Email プロパティがありますが、エンティティ2にはありません。またエンティティ2には PhoneNumber や Address のプロパティがあるが、エンティティ1にはありません。
このように、Azure Table Storageはスキーマレスなので、各エンティティに異なるフィールド(プロパティ)を持たせることが可能なのです。必要に応じてデータ構造を柔軟に変更でき、固定のスキーマに縛られることなく新しいフィールドを追加することも簡単です。
Azure Table Storageの作成手順
では、ここからはAzure Table Storageでテーブルおよびエンティティを作成する方法を示します。
まずAzure Portal でAzure ストレージ アカウントを作成する必要があります。
ステップ1: Azureポータルにサインイン
- Azureポータルにアクセスし、Azureアカウントでサインインします。
作成手順Azureポータル画面
ステップ2: ストレージアカウントの作成
-
Azureポータル画面の「リソースの作成」で「strage account」で検索し、「ストレージアカウント」をクリックします。
ストレージアカウント選択画面
-
「ストレージアカウントを作成する」画面の「基本」タブで適切な設定をします。
「次へ」をクリックします。
基本タブ画面
-
「詳細」タブで適切な設定をします。
「次へ」をクリックします。
詳細タブ画面
-
「ネットワーク」タブで適切な設定をします。
「次へ」をクリックします。
ネットワークタブ画面
-
「データ保護」タブで適切な設定をします。
「次へ」をクリックします。
データ保護タブ画面
-
「暗号化」タブで適切な設定をします。
「確認と作成」をクリックします。
暗号化タブ画面
-
「確認と作成」タブで設定に問題がないことを確認します。
「作成」をクリックします。
確認と作成画面
-
デプロイ完了を確認します。
「リソースに移動」をクリックします。
デプロイ完了成画面
ステップ3: テーブルの追加
- 作成したストレージアカウントの左側のメニューから「データストレージ」→「テーブル」を選択します。「+テーブル」をクリックし、テーブル名を入力したら、「OK」を押します。
テーブル追加画面
ステップ4: テーブルにエンティティを追加する
- 次にテーブルにエンティティを追加します。ストレージブラウザから前に作成したテーブルを選択し、「エンティティの追加」ボタンをクリックします。
エンティティの追加ボタン
12.エンティティの追加画面で入力して「挿入」をクリックします。
エンティティの追加画面
--
Azure Table Storageのデータ操作とクエリパフォーマンス
ここでは、Azure Table Storageのデータ操作とクエリパフォーマンスの向上についてご説明します。
Azure Table Storageの操作方法
Azure Table Storageではデータを効率的に管理・操作するための基本的な操作方法として、以下の3つがあります。
CRUD操作
Azure Table Storageでは、以下の内容のCRUD操作が提供されています。
-
Create(作成):新しいデータを作成し、データベースやストレージに追加する操作です。
-
Read(読み取り):既存のデータを取得して読み取る操作です。例えば、特定のデータを検索したり、表示したりします。
-
Update(更新):既存のデータを変更する操作です。例えば、ユーザーの住所を変更する場合などが該当します。
-
Delete(削除):既存のデータを削除する操作です。
バッチ操作
複数の操作(CRUD操作)を一度にまとめて実行できる機能です。複数のデータ操作を1回のネットワークリクエストで処理し、速度や効率を向上させることができます。
トランザクション機能
同一パーティション内で複数の操作を一括して処理し、すべて成功するか、すべて失敗するかを保証する機能です。データの整合性を保つことができます。
これは具体的にどういう意味でしょうか。
たとえば、銀行口座間でお金を移動させるシステムを考えてみましょう。
- Aさんの口座からお金を引き出す(データの更新)
- Bさんの口座にお金を入れる(データの更新)
もし1つ目の操作だけが成功して、2つ目が失敗すると、Aさんのお金が消えてしまい、Bさんにはお金が入らない、という不整合が起こります。
このような事態を防ぐために、データはセットで処理されるようにトランザクション機能が用いられているのです。
データ操作ツール
Azureでデータを操作するツールには、主に2つがあります。簡単なデータ操作であればAzureポータルで十分対応可能ですが、自動化や複雑な操作を行いたい場合は、Azure SDKを使用する必要があります。
-
Azureポータルからのデータ操作
ブラウザ上から直接データ操作ができ、コードを書かなくてもデータの作成、読み取り、更新、削除を実行できます。
ただし、あくまで基本的な操作に限られており、SDKで実行できるような複雑な処理はサポートされていません。
-
SDKを使用したデータ操作
Azure SDKは、さまざまなプログラミング言語(C#、Python、Java、Node.jsなど)に対応したライブラリやツールセットを提供しており、コードを書くことでAzureのサービスを簡単に操作できるようになっています。
SDKを使えば、データの作成や更新、削除、さらには複雑なバッチ処理などをプログラムとして自動化できます。繰り返し行う処理や、大量のデータを一括で操作する場合に非常に便利です。
クエリのパフォーマンス
データの量が増えると、クエリの処理速度が遅くなることがあります。これを防ぐためには、クエリを効率的に行うための最適化が必要です。その方法としては、以下の2つがおすすめです。
1.PartitionKeyとRowKey
Azure Table Storageでは、PartitionKey と RowKeyという2つのキー(識別子)を使ってデータを管理しています。2つのキーを適切に設定することで、データの検索が効率化されます。
-
PartitionKey: データをグループ分けするためのキーです。例えば、"Country"をPartitionKeyに設定して、同じ国に属するデータをグループ化することで特定の国のデータを素早く検索できます。
("PartitionKey = 'USA'" でアメリカに住む全顧客を取得。
) -
RowKey: 同じPartitionKey内で、データを一意に識別するためのキーです。たとえば、"CustomerID"をRowKeyに設定すれば、同じ国の中でも個々の顧客を一意に識別することができます。(
"RowKey = '12345'" で、アメリカに住む特定の顧客(IDが12345の顧客)のデータを素早く取得。
)
2. フィルタリング
フィルタリングは、データを絞り込むための操作です。特定の条件に基づいて、データの一部だけを取り出します。Azure Table Storageでは、クエリを使ってデータを絞り込むときに、特定の条件でデータを選ぶことができます。これを「$filter」と呼びます。
たとえば、以下のようにフィルタを使います。
$filter=Age ge 30
これで、「年齢が30以上の人だけを取得する」というフィルタリングができます。
複雑な条件でフィルタリングを行うと、パフォーマンスが低下することがあります。できるだけシンプルな条件で絞り込むことが望ましいでしょう。
Azure Table Storageのセキュリティ
ここでは、Azure Table Storageで重要なセキュリティについて説明します。
Azure Table Storageでは、データを安全に保護するために、以下のデータ暗号化及びアクセス制御についての機能を用意しています。
データの暗号化
Azure Table Storageでは保存されているデータも、ネットワークを通じて転送されるデータも、自動的に暗号化されます。暗号化の特徴は次のとおりです。
-
データ保存:
クライアントがデータを保存すると、Storage Service Encryption (SSE)が自動的に動作し、データをサーバー側で暗号化します。ストレージに保存されるデータは暗号化された状態になります。 -
キーの選択:
Azureが管理するキー、ユーザー自身のキー、Microsoft管理の3つキーの中から選択可能です。 -
データ転送:
SSL/TLSというセキュアなプロトコルを使って暗号化された状態で転送されます。データが転送される途中で盗まれたりするリスクを防ぎます。
こうした仕組みより、データは常に保存時と転送時に暗号化され、セキュリティが確保されています。
アクセス制御
さらにAzure Table Storageでは以下のようなアクセス制限の仕組みによってセキュリティを強化しています。
-
ロールベースのアクセス制御(RBAC):
特定のユーザーやグループに、どのデータにアクセスできるかを設定します。例えば、「データを見るだけの権限」と「データを編集できる権限」を分けられます。 -
共有アクセス署名(SAS)トークン:
特定の時間や特定の操作(読み取り、書き込み)だけに許可を与えるためのセキュリティトークンもあります。
リージョンの選択
Azureには、世界中に多数のデータセンターがあります。ここではリージョンに関連する、複製に関するプランとリージョンを選ぶ際に考慮すべきポイントについてご説明します。
リージョン間のデータ複製
Azureでは、災害や障害が発生した場合でもデータを安全に守るために、データの複製(レプリケーション)を行うことができます。ストレージアカウントの設定時に選択する以下のプランに基づき、どのようなレプリケーションを行うかを選ぶことが可能です。
【プラン】
LRS(ローカル冗長ストレージ):
データが同じデータセンター内で3回複製されます。1つの場所だけにデータを保管しますが、シンプルで安価です。
LRSイメージ
参考: マイクロソフト
ZRS(ゾーン冗長ストレージ):
同じリージョン内の複数の物理的なゾーンにデータを複製します。単一ゾーンの障害に備えたい場合や、高い可用性が求められる場合におすすめです。
ZRS
参考: マイクロソフト
GRS(地理的冗長ストレージ):
データを2つの異なる地域(リージョン)に複製します。1つ目のリージョンはLRSとして運用され、2つ目のリージョンはバックアップ用に使われます。リージョン全体が停止するような大規模な災害にも備えたい場合に適しています。
GRSイメージ
参考: マイクロソフト
RA-GRS(読み取りアクセス地理的冗長ストレージ):
GRSと同じく2つのリージョンにデータが複製されますが、バックアップとして保存される2つ目の地域から読み取り専用でアクセスできるオプションです。災害時でも、データの読み取りが可能です。
GZRS(地理ゾーン冗長ストレージ):
ZRSの強化版で、データを複数のゾーンに分散して保存し、さらに異なる地域にもデータを複製します。地域全体が障害を受けても、別の地域にデータがあり、さらにゾーンごとの分散もあるため非常に高い耐障害性を持ちます。
GZRS
参考: マイクロソフト
RA-GZRS(読み取りアクセス地理ゾーン冗長ストレージ):
GZRSの強化版で、GZRSの仕組みに加え、別の地域に保存されているデータに読み取りアクセスが可能なオプションです。
以上をまとめた表になります。
冗長プラン | 保存場所 | 耐障害性 | コスト | 利用場面 |
---|---|---|---|---|
LRS | 同じデータセンター内 | データセンター内障害にのみ対応 | 低 | コスト重視、単一データセンター内の利用 |
ZRS | 同じリージョン内のゾーン | 複数ゾーンの障害に対応 | 中 | ゾーンレベルの冗長性が必要な場合 |
GRS | 異なる地域に複製 | リージョン全体の障害に対応 | 高 | リージョン全体の災害に備えたい場合 |
RA-GRS | 異なる地域に複製 | リージョン全体の障害に対応+読み取り可 | 高 | 災害時でもデータを読み取りたい場合 |
GZRS | ゾーン+異なる地域に複製 | 複数ゾーンと地域の障害に対応 | 高 | ゾーンと地域の両方に冗長性が必要な場合 |
RA-GZRS | ゾーン+異なる地域に複製 | 複数ゾーンと地域の障害に対応+読み取り可 | 最も高い | 最高レベルの冗長性と可用性が必要なビジネス |
リージョン選択のポイント
リージョンを選ぶ際に考慮すべきポイントは以下の通りです:
-
データ転送速度:
近くのリージョンを選ぶと、データの転送速度が速くなります。 -
コンプライアンス要件:
国や地域によっては、法律や規則によりデータを特定の場所に保存する必要がある場合があるため、事前に調べておくことが大切です。 -
コスト:
データを複製する場合、選択するリージョンや複製方法によってコストが変わるので注意が必要です。
実用的なユースケース
Azure Table Storageは、スケーラブルでコスト効率の高いデータ管理を提供するため、多岐にわたる場面で利用されています。以下が、具体的な活躍場面です。
1. ビッグデータの分析
Azure Table Storageは、ビッグデータの収集と分析に適したコスト効率の高いストレージです。大量の非構造化データを蓄積し、後でデータ分析や機械学習のために利用できます。
活用例:
- 大量のセンサーデータやログデータを収集し、後に分析するためのデータレイクとしての使用。
- ビジネスインテリジェンスツールやデータウェアハウスと連携して、ビッグデータの分析を行う。
2. ウェブスケーリング
大規模なウェブアプリケーションで、スケーラビリティが必要な場合にもAzure Table Storageは最適です。必要に応じてデータ容量を柔軟に拡張できるため、トラフィックの増加にも対応できます。
活用例:
- トラフィックが急増するキャンペーン期間中のデータ管理。
- 高トラフィックなウェブアプリケーションで、ユーザー行動やアクティビティデータの保存と処理。
3. セッション管理
Azure Table Storageは、セッションデータの一時保存にも適しています。短期間で利用されるデータを低コストで保存でき、セッションが終了すれば削除することが可能です。
活用例:
- eコマースサイトでのユーザーセッションデータやショッピングカートデータの管理。
- 高スケールなアプリケーションでの一時的なユーザー情報の保存。
4. ユーザーデータストレージ
ユーザーデータのストレージとして、Azure Table Storageは柔軟でコスト効率が高い選択肢です。リレーショナルデータベースほど複雑でないシステムで、ユーザープロファイルや設定を管理するのに役立ちます。
活用例:
- ユーザープロフィール、アカウント情報、個人設定の保存。
- SNSやフォーラムなどのユーザー情報を管理する大規模システムでの利用。
Azure Table Storageの料金体系
最後にここでは、Azure Table Storageの料金体系についてご紹介します。
Azure Table Storageの料金はデータ保存と操作(読み書き・転送)に対して発生し、さらにストレージの冗長化プラン(LRS、GRS、RA-GRS、ZRS、GZRS、RA-GZRS)によっても料金が変動します。
データ保存料金(GB/月)
選んだ冗長化プランによって、1GBあたりの料金が変わります。
- LRS: ¥6.52 ~ ¥9.44
- GRS: ¥8.69 ~ ¥18.90
- RA-GRS: ¥10.86 ~ ¥27.39
- ZRS: ¥8.14 ~ ¥11.82
- GZRS: ¥14.65 ~ ¥21.91
- RA-GZRS: ¥18.32 ~ ¥27.39
操作とデータ転送料金(10,000件あたり)
すべての操作(読み取り・書き込み・削除など)は10,000件単位で課金されます。
- 書き込み: ¥0.0522 ~ ¥10.86
- 読み取り: ¥0.0522 ~ ¥1.05
本記事に記載されている料金は、2024年10月時点の為替レートに基づいて計算されています。為替レートは変動する可能性があるため、最新の情報については、公式ページで最新情報を確認してください。
まとめ
この記事では、Azure Table Storageの基本的な概念、主要機能、セキュリティ、ユースケース、そして料金体系について詳細に説明しました。
Azure Table Storageは、Microsoft Azureクラウドプラットフォームの一部として提供されているNoSQLデータベースサービスです。大量の構造化された非リレーショナルデータを格納するために設計されているので、特に大規模なデータセットを扱うビジネスにとって、構造化されたデータを効率的に保存し、迅速にアクセスできる柔軟なソリューションとなるでしょう。
ぜひAzure Table Storageを導入して、大規模なデータ管理を効率化しコスト削減を実現してみてください。データ管理の効率を大幅に向上させることができる上に、ビッグデータの分析、ウェブスケーリング、セッション管理、ユーザーデータストレージなど、多様なアプリケーションやシステムビジネスの成長にも貢献することにつながるでしょう。
本記事が皆様のお役に立てたら幸いです。