Cosmos DB インスタンスの作成

完了

このユニットでは、Azure Cosmos DB について、またそれがデータを整理する方法について詳しく学習します。 Visual Studio Code を使用して Azure Cosmos DB データベースとコンテナーを作成および管理する方法について説明します。

Azure Cosmos DB とは何ですか?

Azure Cosmos DB は、ドキュメント データベースを実装するクラウド サービスです。 ドキュメント内のデータは、JSON 構文に準拠している必要があります。 JSON ドキュメントには、プロパティ、サブドキュメント、およびドキュメントの配列を含めることができます。

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "partitionKey": "Bikes",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 }
      ]
}

リレーショナル データベース内のテーブルとは異なり、Azure Cosmos DB 内のドキュメントは定義されたスキーマに従っていません。 これにより、データベースはさまざまな “形状” とサイズを持つ異なるドキュメントを保持できます。 たとえば、異なる顧客に関するさまざまな情報を同じデータベースに格納することができます。 おそらく、顧客に対する配列として、完全な住所の履歴を記録することもできるでしょう。 信用度などの追加情報も記録するかもしれません。

Azure Cosmos DB クラウド サービスは、階層として構成されています。 上部には Azure Cosmos DB アカウント (リソース) があります。 Azure Cosmos DB アカウントは、一連のデータベースに対するセキュリティのユニットです。 Azure Cosmos DB アカウントは、データベースの場所と、それらのデータベースにアクセスするために必要なセキュリティ情報を指定します。 1 つのアカウント内で、1 つまたは複数のデータベースを作成します。 各データベース内に、1 つまたは複数のコンテナーを作成します。 ドキュメントはコンテナーに格納します。

Conceptual image of parent-child relationship of account, database, and container in Cosmos D B.

Cosmos DB コンテナーとパーティション キー

各コンテナーは、一連のパーティションとして構成されます。 パーティションは、おおよそディスク上の物理ファイルに対応します。 大きなパーティションは独自のファイルをもつ場合がありますが、いくつかの小さなパーティションが結合されて 1 つのファイルとなる場合もあります。 各ドキュメントには、属しているパーティションを定義するパーティション キーがあります。 パーティション分割を使用して、関連するドキュメントをまとめて格納し、データへのアクセス方法を最適化します。

次の例は、Contoso アプリケーションの一部として製品情報を格納する JSON ドキュメントを示しています。 このデータは別のシステムから送信されるため、ID は既に GUID として構成されています。 独自のコンテナーでは、ID を持ち込むか、Cosmos DB に ID を提供させることができます。 新しいドキュメントを挿入するときは、ID とパーティション キーを指定する必要があります (パーティション キーを使用している場合)。

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "categoryName": "Bikes, Touring Bikes",
    "sku": "BK-T79U-50",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "tags": [
        {
            "_id": "27B7F8D5-1009-45B8-88F5-41008A0F0393",
            "name": "Tag-61"
        }
    ],
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 },
        { "location": "Boston", "inventory": 4 },
        { "location": "Miami", "inventory": 12 },
        { "location": "San Diego", "inventory": 58 }
      ]
}

Contoso 社は、カテゴリ名 (categoryName) をパーティション キーとして使用することにしました。これは、コンテナー全体にドキュメントを “ある程度” 均等に分散できるためです。 パーティション キー フィールドは、コンテナーの作成時にコンテナーに対して設定されます。 コンテナーに挿入された新しいドキュメントごとに、パーティション キーが JSON ドキュメントの一部として含まれます。 上記の例では、正しい形式のドキュメントの最小要件は、一意の ID とパーティション キー (idcategoryName)です。 別のシステムからデータセットを取り込み、その一意の ID を保持して他のシステムに接続する場合は、id フィールドを使用するか、Cosmos DB で新しい一意の id を作成することを許可するかを選択できます。ID は別個のプロパティ名で格納されます。

Note

Azure Cosmos DB によって、いくつかの独自のフィールドがドキュメントに追加されます。 これらのフィールドの多くは内部的な目的で使用され、ほとんどの場合、直接変更すべきではありません。 例外は id という名前のフィールドです。Azure Cosmos DB は、データベース内のドキュメントを識別するためにこのフィールドを使用し、各ドキュメントには一意の id が必要です。

Azure Cosmos DB のスループット コスト

Azure Cosmos DB では、1 秒あたりの要求ユニット数 (RU/秒) の概念を使用して、データベースのパフォーマンスと請求が管理されます。 このメジャーは、必要なパフォーマンスをサポートするためにプロビジョニングされる必要のある、基盤となる物理リソースを抽象化します。 データベースまたはコンテナーを作成するときに、割り当てる RU/s の数を指定します。 それに応じて料金が発生します。

1 KB の項目をポイント読み取りする (ID とパーティション キーの値で 1 つの項目をフェッチする) コストは、1 要求ユニット (または 1 RU) です。 その他のすべてのデータベース操作にも、同様に RU を使用してコストが割り当てられます。 Azure Cosmos DB コンテナーとのやりとりにどの API 使用するかに関係なく、コストは RU によって常に測定されます。 データベース操作が書き込み、ポイント読み取り、またはクエリのいずれの場合でも、コストは常に RU で測定されます。

400 RU/秒をプロビジョニングしてコストが 40 RU のコストを発行する場合、1 秒間にそのようなクエリを 10 個発行することができます。 それを超えるすべての要求はレート制限を受け、要求を再試行する必要があります。 クライアント ドライバーを使用している場合、それらでは自動再試行ロジックがサポートされています。

RU/秒をできるだけ低く保つには、次の点を考慮してください。

Object 考慮事項
ドキュメント サイズ KB のドキュメントが大きいほど RU が増加します。
ドキュメントのインデックス作成 パフォーマンスの高いインデックス作成によって RU が低下する可能性があります。
ドキュメント プロパティの数 すべてのプロパティにインデックスを付ける場合、より多くのプロパティを使用すると RU が増加します。 キー プロパティに選択的にインデックスを付ける場合は、必要とする RU が少なくなります。
データの一貫性 厳密な有界整合性レベルでは、他の緩やかな整合性レベルよりも多くの RU が消費されます。
ドキュメントの読み取りの種類 項目の ID とパーティション キーを使用したポイント読み取りのコストは、クエリよりも RU は大幅に少なくなります。
クエリ パターン クエリの複雑さは、消費される RU の数に影響を与えます。
スクリプトの使用法 ストアド プロシージャ、トリガー、ユーザー定義関数は、これらのスクリプト内のクエリに加えて RU を消費します。

Cosmos DB にアクセスする

Azure Cosmos DB には、Cosmos DB に接続するための次の方法が含まれています。

  • Visual Studio Code
  • JavaScript (およびその他の言語) SDK
  • Azure portal
  • Azure CLI
  • PowerShell
  • REST API

Azure Cosmos DB API

Azure Cosmos DB は、いくつかのプログラム API をサポートしています。 これらの API は、他の一般的な NoSQL データベースで使用される API に可能な限り準拠しています。 この目的は、開発者が新しいパラダイムを習得したり、アプリケーションに大きな変更を加えたりする必要なしに、これらのデータベースから Azure Cosmos DB へ簡単に移行するための経路を提供することです。 現在サポートされている API は次のとおりです。

  • コア (SQL)
  • MongoDB
  • Cassandra
  • Gremlin (共通グラフ DB API)
  • Azure Table Storage

Core (SQL) API は、ほとんどのリレーショナル データベース管理システムで使用される SQL 言語の一種です。 テーブルではなくスキーマレス ドキュメントのセットを処理するための、制限事項や変更があります。

Visual Studio Code を使用して Azure Cosmos DB を管理する

開発環境として Visual Studio Code を使用している場合は、Azure Databases 拡張機能をインストールして、Azure Cosmos DB データベースとアプリケーションを構築できます。

Screenshot of the Azure Databases extension in Visual Studio Code marketplace

拡張機能は Visual Studio Code 用の拡張機能マーケットプレースからインストールします。 Databases 拡張機能をインストールしたら、Azure エクスプローラー (Shift + Alt + A) で Cosmos DB 拡張機能を使用します。

Azure エクスプローラーから Cosmos DB を管理する

Databases 拡張機能 (Visual Studio Code の Azure エクスプローラー) には、Visual Studio Code と統合されたグラフィカル ユーザー インターフェイスが用意されています。 この拡張機能を使用して、Azure Cosmos DB のアカウント、データベース、コンテナー、ドキュメントを作成、削除、管理することができます。

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the Documents node for a contextual menu to create a new document.

ポータルでアカウントにアクセスする

また、この拡張機能では、Azure portal でアカウントを開く機能を提供することで、Cosmos DB のすべての機能に簡単にアクセスできます。 これは、アカウントを右クリックし、[ポータルで開く] を選択するとアクセスできます。

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the account node to open account in Azure portal.

ポータルでは、Cosmos DB のすべての構成と、データベースとコンテナーの Data Explorer にアクセスできます。 Data Explorer を使用して、データの挿入、更新、削除、クエリを実行します。

Screenshot of the Azure portal with the Data Explorer showing the query window open with a JSON document displayed.