0Pricing
Azure Fundamentals · レッスン

Azure Cosmos DB:グローバル NoSQL

Cosmos DB のマルチモデル、マルチリージョン アーキテクチャを学び、パーティション キーを理解して、アプリケーションの要件に適した整合性レベルを選択します。

「Azure Cosmos DB:グローバル NoSQL」はCoddyKit上の無料Azure Fundamentalsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAzure Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Azure Fundamentalsコースには全4レッスンが含まれています。

Azure Cosmos DB とは

Azure Cosmos DB は、Microsoft のグローバル分散型マルチモデル NoSQL データベース サービスです。世界中のどの場所でも、あらゆる規模で 1 桁ミリ秒の読み取りおよび書き込みレイテンシを実現できるように設計されています。単一リージョンに制約される従来のデータベースとは異なり、Cosmos DB では数十の Azure リージョンにデータを同時に透過的にレプリケートできます。

マルチモデル API のサポート

Cosmos DB は、1 つのサービスを通じて複数のデータベース API をサポートします。ネイティブのNoSQL API (JSON ドキュメント)、MongoDB ドライバーで構築されたアプリ向けのMongoDB API、ワイド列ワークロード向けのApache Cassandra API、グラフ データ向けのGremlin API、キーと値のデータ向けのTable APIを使用できます。各 API は、使い慣れたインターフェイスを通じて Cosmos DB の基盤エンジンを利用できます。

アカウント、データベース、コンテナー

Cosmos DB のリソース階層は 3 つのレベルで構成されます。アカウントは最上位のリソースで、レプリケーション先のリージョン一覧と整合性レベルを定義します。アカウント内には、論理名前空間としてデータベースを作成します。各データベース内にはコンテナーを作成します。コンテナーはアイテム (ドキュメント) を保持し、スループットをプロビジョニングする単位です。

# Create a Cosmos DB account with the NoSQL API
az cosmosdb create \
  --name mycosmosaccount \
  --resource-group myRG \
  --kind GlobalDocumentDB \
  --locations regionName=eastus failoverPriority=0 isZoneRedundant=true

# Create a database
az cosmosdb sql database create \
  --account-name mycosmosaccount \
  --resource-group myRG \
  --name myDatabase

パーティション キー: スケーリングの基盤

パーティション キーは、すべてのアイテムに含まれるプロパティであり、Cosmos DB が物理パーティション間でデータを分散するために使用します。適切なパーティション キーを選ぶことは非常に重要です。多数の異なる値を持つ高いカーディナリティを備え、書き込みトラフィックを均等に分散し、クエリの大部分に含まれる必要があります。不適切なパーティション キーを選ぶと、スループットがスロットリングされ、パフォーマンスが低下するホット パーティションが発生します。

// Example container with /userId as partition key
// Items in the container:
{
  'id': 'order-001',
  'userId': 'user-42',
  'product': 'Widget',
  'total': 29.99
}
// userId distributes orders across partitions

スループット: RU/s モデル

Cosmos DB のスループット料金は、1 秒あたりの Request Unit (RU/s)に基づいて発生します。1 RU は、おおよそ ID によって 1 KB のドキュメントを読み取るコストに相当します。書き込み、クエリ、削除では、アイテムのサイズやインデックスの複雑さに応じて、より多くの RU が必要になります。RU/s はコンテナー レベルでプロビジョニングすることも、データベース内のすべてのコンテナーでプールを共有することもできます。また、autoscale モードに切り替えて、Cosmos DB にスループットを自動的にスケーリングさせることもできます。

# Create a container with 400 RU/s
az cosmosdb sql container create \
  --account-name mycosmosaccount \
  --resource-group myRG \
  --database-name myDatabase \
  --name orders \
  --partition-key-path '/userId' \
  --throughput 400

グローバル分散

Cosmos DB の最も強力な機能は、数回のクリックでデータをグローバルにレプリケートできることです。アカウントにリージョンを追加すると、Cosmos DB がすべてのリージョン間で書き込みを自動的に同期します。マルチ書き込み (マルチマスター) 構成では、各リージョンが読み取りと書き込みの両方を同時に処理できるため、地理的に分散したユーザーのレイテンシを最小限に抑えられます。

# Add a second region to the Cosmos DB account
az cosmosdb update \
  --name mycosmosaccount \
  --resource-group myRG \
  --locations regionName=eastus failoverPriority=0 \
                regionName=westeurope failoverPriority=1

5 つの整合性レベル

Cosmos DB には、最も強いものから最も弱いものまで、スペクトラムとして調整可能な5 つの整合性レベルがあります。Strong (線形化可能な読み取り、最も高いレイテンシ)、Bounded Staleness (読み取りの書き込みに対する遅延を一定の範囲に制限)、Session (既定値 — セッション内で自分の書き込みに対する整合性のある読み取り)、Consistent Prefix (順序が入れ替わった書き込みを読み取ることがない)、Eventual (最も高速な読み取り、最も弱い保証) です。古いデータを許容できる度合いに基づいて選択します。

自動インデックス作成

既定では、Cosmos DB は挿入するすべてのアイテムのすべてのプロパティに自動的にインデックスを作成するため、事前にスキーマを定義する必要がありません。これにより、インデックスを保守せずに柔軟なアドホック クエリを実行できます。インデックス ポリシーをカスタマイズして、クエリで使用しないパスを除外し (ストレージ コストを削減)、複数のプロパティに対する ORDER BY クエリ用の複合インデックスを追加することもできます。

// Custom indexing policy example
{
  'indexingMode': 'consistent',
  'includedPaths': [{ 'path': '/*' }],
  'excludedPaths': [
    { 'path': '/largeTextBlob/?' },
    { 'path': '/_etag/?' }
  ]
}

イベント ドリブン アプリ向けの変更フィード

変更フィードは、Cosmos DB コンテナーに対するすべての作成および更新操作を記録したソート済みログです。アプリケーションは変更フィードをサブスクライブして、後続の処理をトリガーできます。たとえば、検索インデックスの更新、通知の送信、マテリアライズド ビューへの書き込みなどが可能です。変更フィードは、Cosmos DB アーキテクチャにおけるイベント ドリブン パターンと CQRS パターンの基盤です。

有効期限付きデータ向け Time-to-Live (TTL)

Cosmos DB はTime-to-Live (TTL)をサポートしています。これはコンテナーまたは個々のアイテムに設定するプロパティで、指定した秒数が経過した後にアイテムを自動的に削除します。セッション データ、キャッシュ エントリ、規制上の保持期間が設定された監査ログなど、既知の有効期限があるデータに適しています。TTL による削除はバックグラウンド タスクとして実行され、プロビジョニング済み RU/s を消費しません。

// Enable TTL on a container (TTL in seconds)
az cosmosdb sql container update \
  --account-name mycosmosaccount \
  --resource-group myRG \
  --database-name myDatabase \
  --name sessions \
  --ttl 3600

価格とサーバーレス レベル

Cosmos DB には 2 つの課金モードがあります。プロビジョニング済みスループットでは、実際の使用量にかかわらず RU/s 時間単位で課金され、安定した予測可能なワークロードに適しています。サーバーレス モードでは、消費した RU と保存した GB に対して課金され、最低料金はありません。そのため、開発、プロトタイピング、トラフィックの急増に適しています。サーバーレスの Cosmos DB は現在、単一リージョンに限定されています。

理解度チェック

このレッスンで扱った Microsoft Azure Fundamentals (AZ-900) の概念について、理解度を確認します。

レッスンのまとめ

このレッスンでは、Cosmos DB はグローバル分散型のマルチモデル NoSQL サービスであること、パーティションキーはデータのシャーディング方法を決定するため、慎重に選択する必要があること、そして5 つの整合性レベルによって、レイテンシーとデータの鮮度のバランスを調整できることを学びました。次は、オープンソースのデータベースエンジン向け Azure マネージドサービスについて学びます。

よくある質問

「Azure Cosmos DB:グローバル NoSQL」レッスンは無料ですか?

はい。「Azure Cosmos DB:グローバル NoSQL」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Azure Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Azure Fundamentalsコースには全4レッスンが含まれています。

「Azure Cosmos DB:グローバル NoSQL」で何を学びますか?

Cosmos DB のマルチモデル、マルチリージョン アーキテクチャを学び、パーティション キーを理解して、アプリケーションの要件に適した整合性レベルを選択します。 ブラウザで直接実行するハンズオンコードでAzure Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Azure Fundamentalsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAzure Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「Azure Cosmos DB:グローバル NoSQL」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAzure Fundamentalsレッスンでコードを書いて実行できますか?

はい。すべてのAzure Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Azure SQL Database
  2. Azure Cosmos DB:グローバル NoSQL
  3. Azure Database for Open-Source Engines
  4. Azure へのデータベース移行
← Azure Fundamentalsに戻る