Azure Cosmos DB のデータベース、コンテナー、項目
適用対象: NoSQL
MongoDB
Cassandra
Gremlin
Table
Azure Cosmos DB はフルマネージドのサービスとしてのプラットフォーム (PaaS) です。 Azure Cosmos DB を使い始めるには、サブスクリプションの Azure リソース グループ内に Azure Cosmos DB アカウントを作成します。 次に、アカウント内にデータベースとコンテナーを作成します。
Azure Cosmos DB アカウントには、一意のドメイン ネーム システム (DNS) 名が含まれています。 DNS 名は、次のような多くのツールを使用して管理できます。
- Azure portal
- Azure Resource Manager のテンプレート
- Bicep テンプレート
- Azure PowerShell
- Azure CLI
- Azure Management SDK
- Azure REST API
データやスループットを複数の Azure リージョンにレプリケートする場合は、いつでもアカウントの Azure リージョンを追加したり削除したりできます。 アカウントは、単一リージョンまたは複数の書き込みリージョンを持つように構成できます。 詳細については、「Azure portal を使用して Azure Cosmos DB アカウントを管理する」を参照してください。 アカウントに対して既定の一貫性レベルも構成できます。
Azure Cosmos DB アカウントの要素
現在、1 つの Azure サブスクリプションで Azure Cosmos DB アカウントを最大 50 個作成することができます。 この制限は、サポート リクエストを行うと引き上げることができます。
1 つの Azure Cosmos DB アカウントを使用して、事実上無制限のデータ量とプロビジョニング スループットを管理できます。 データとプロビジョニング スループットを管理するには、アカウントに 1 つ以上のデータベースを作成した後、1 つ以上のコンテナーを作成してデータを格納します。
次の図は、Azure Cosmos DB アカウントでの要素の階層を示しています。
次の図は、Azure Cosmos DB アカウントでのエンティティの階層を示しています。
Azure Cosmos DB データベース
Azure Cosmos DB では、データベースは名前空間に似ています。 データベースはコンテナーのグループに過ぎません。 次の表は、データベースがどのように API 固有のさまざまなエンティティにマップされているかを示しています。
Azure Cosmos DB のエンティティ | NoSQL 用 API | Apache Cassandra 用 API | MongoDB 用 API | Apache Gremlin 用 API | Table 用 API |
---|---|---|---|---|---|
Azure Cosmos DB データベース | データベース | キースペース | データベース | データベース | 適用なし |
Note
Table 用 API アカウントでは、Azure Table Storage との互換性を維持するため、Azure Cosmos DB のテーブルがアカウント レベルで作成されます。
Azure Cosmos DB コンテナー
Azure Cosmos DB のコンテナーは、データが格納される場所です。 仮想マシンのサイズが大きくなるとスケールアップするほとんどのリレーショナル データベースとは異なり、Azure Cosmos DB はスケールアウトします。
データは、パーティションと呼ばれる 1 つ以上のサーバーに格納されます。 パーティションを増やすには、スループットを向上させるか、ストレージの増加に応じてパーティションが自動的に増加します。 このリレーションシップにより、事実上無制限のスループットとストレージがコンテナーに提供されます。
コンテナーを作成するときに、パーティション キーを指定する必要があります。 パーティション キーは、Azure Cosmos DB がパーティション間でデータを効率的に分散するのに役立つ、項目から選択するプロパティです。 Azure Cosmos DB は、このプロパティの値を使用して、書き込み、更新、削除が行われる適切なパーティションへのデータのルーティングを行います。 また、パーティション キーは、データを効率的に取得するため、クエリの WHERE
句でも使用できます。
Azure Cosmos DB のデータの基になるストレージ メカニズムは、物理パーティションと呼ばれます。 物理パーティションには、最大 10,000 RU/秒のスループットを設定でき、最大 50 GB のデータを格納できます。 Azure Cosmos DB は、最大 20 GB のデータを格納できる論理パーティションでこのパーティション分割概念を抽象化します。
論理パーティションを使うことで、基になる物理パーティションを増加しても、サービスはより優れた弾力性とパーティション上のデータの管理を提供できます。 パーティション分割とパーティション キーの詳細については、「Azure Cosmos DB でのパーティション分割とスケーリング」を参照してください。
コンテナーを作成するときには、次のいずれかのモードでスループットを構成します。
専用スループット: コンテナーのスループットは、そのコンテナーに対してのみ予約されます。 専用スループットには、標準と自動スケーリングの 2 種類があります。 詳細については、「Azure Cosmos DB コンテナーに標準 (手動) のスループットをプロビジョニングする」を参照してください。
共有スループット: スループットは、データベース レベルで指定された後、データベース内の最大 25 個のコンテナーで共有されます。 スループットの共有では、独自の専用スループットで構成されているコンテナーは除外されます。
共有スループットは、データベース内のすべてのコンテナーの要求とストレージのニーズが似ている場合、またはデータで予測可能なパフォーマンスが必要ない場合に適したオプションです。 詳細については、「Azure Cosmos DB に標準 (手動) のスループットをプロビジョニングする」を参照してください。
Note
専用スループットと共有スループットを切り替えることはできません。 共有スループット データベースに作成したコンテナーを、専用スループットを使うように更新することはできません。 コンテナーを共有スループットから専用スループットに変更するには、新しいコンテナーを作成し、それにデータをコピーする必要があります。 Azure Cosmos DB のコンテナー コピー機能を使用すると、このプロセスを簡単に行うことができます。
コンテナーはスキーマに依存しません。 コンテナー内の項目は、同じパーティション キーを共有している限り、任意のスキーマまたは異なるエンティティを持つことができます。 たとえば、コンテナーには、顧客プロファイル情報を含むアイテムまたはドキュメントと、顧客のすべての販売注文を表す 1 つ以上のアイテムまたはドキュメントを含めることができます。 すべての顧客の同様の情報を同じコンテナーに配置できます。
既定では、コンテナーに追加するすべてのデータに自動的にインデックスが作成され、明示的にインデックスを作成する必要はありません。 コンテナーのインデックス作成ポリシーを構成することで、そのインデックス作成をカスタマイズできます。
パフォーマンスに影響を与えないために、コンテナー内の選択した項目またはコンテナー全体に対して有効期限 (TTL) を設定すると、未使用のスループットを使ってバックグラウンドで、それらの項目を自動的に削除できます。 ただし、有効期限が切れたデータは、削除されていない場合でも、読み取り操作には表示されません。 詳細については、「Azure Cosmos DB で Time to Live を構成する」を参照してください。
Azure Cosmos DB には、変更フィードと呼ばれる変更データ キャプチャの組み込み機能があります。 これを使用して、コンテナー内のデータに対するすべての変更をサブスクライブできます。
コンテナーには、ストアド プロシージャ、トリガー、ユーザー定義関数 (UDF)、マージ プロシージャを登録できます。
コンテナー内の各ドキュメントには、そのコンテナーの論理キーのプロパティ値内で一意の id
プロパティが必要です。 このプロパティの組み合わせを使用すると、明示的に定義しなくても、コンテナー内で一意の制約を使用できます。
また、1 つ以上のプロパティを使用する Azure Cosmos DB コンテナーに一意キー制約を指定することもできます。 一意キー制約により、論理パーティション キーごとに 1 つ以上の値の一意性が確保されます。 一意キー ポリシーを使用してコンテナーを作成する場合、一意キー制約で指定されている値と重複する値を持つ新しい項目や更新された項目を作成することはできません。
コンテナーは、次の表に示すように、API 固有のエンティティに特化されます。
Azure Cosmos DB のエンティティ | NoSQL 用 API | Cassandra 用 API | MongoDB 用 API | Gremlin 用 API | Table 用 API |
---|---|---|---|---|---|
Azure Cosmos DB コンテナー | コンテナー | テーブル | コレクション | グラフ | テーブル |
Note
大文字と小文字が異なる同じ名前の 2 つのコンテナーを作成しないようにしてください。 Azure プラットフォームの一部には大文字と小文字の区別がないため、そのような名前付けによってコンテナーで診断データやアクションの混同や衝突が発生する可能性があります。
Azure Cosmos DB コンテナーのプロパティ
Azure Cosmos DB コンテナーには、一連のシステム定義のプロパティがあります。 使用する API によっては、一部のプロパティが直接公開されない場合があります。 次の表は、システム定義のプロパティを示しています。
システム定義のプロパティ | システム生成またはユーザー構成可能 | パーパス | NoSQL 用 API | Cassandra 用 API | MongoDB 用 API | Gremlin 用 API | Table 用 API |
---|---|---|---|---|---|---|---|
_rid |
システム生成 | コンテナーの一意識別子。 | はい | いいえ | 番号 | 番号 | いいえ |
_etag |
システム生成 | オプティミスティック同時実行制御に使用されるエンティティ タグ。 | はい | いいえ | 番号 | 番号 | いいえ |
_ts |
システム生成 | コンテナーの最終更新時のタイムスタンプ。 | はい | いいえ | 番号 | 番号 | いいえ |
_self |
システム生成 | コンテナーのアドレス指定可能な URI。 | はい | いいえ | 番号 | 番号 | いいえ |
id |
ユーザーが構成可能 | コンテナーの名前。 | はい | イエス | イエス | イエス | はい |
indexingPolicy |
ユーザーが構成可能 | コンテナーのインデックスをビルドするためのポリシー。 | はい | いいえ | イエス | イエス | はい |
TimeToLive |
ユーザーが構成可能 | 設定した期間後の、コンテナーからの項目の自動削除。 詳細については、「Time to Live」を参照してください。 | はい | いいえ | 番号 | 番号 | はい |
changeFeedPolicy |
ユーザーが構成可能 | コンテナー内の項目に加えられた変更の読み取りのためのポリシー。 詳細については、変更フィードに関するページを参照してください。 | はい | いいえ | 番号 | 番号 | はい |
uniqueKeyPolicy |
ユーザーが構成可能 | 論理パーティション内の 1 つ以上の値の一意性を確保するためのポリシー。 詳細については、一意キー制約に関するページを参照してください。 | はい | いいえ | 番号 | 番号 | はい |
AnalyticalTimeToLive |
ユーザーが構成可能 | 分析ストアのコンテキストで行われる、設定した期間後の、コンテナーからの項目の自動削除。 詳細については、「分析ストア」を参照してください。 | はい | いいえ | 有効 | いいえ | いいえ |
Azure Cosmos DB 項目
使用する API に応じて、個々のデータ エンティティはさまざまな方法で表すことができます。
Azure Cosmos DB のエンティティ | NoSQL 用 API | Cassandra 用 API | MongoDB 用 API | Gremlin 用 API | Table 用 API |
---|---|---|---|---|---|
Azure Cosmos DB の項目 | Item | 行 | ドキュメント | ノードまたはエッジ | Item |
項目のプロパティ
Azure Cosmos DB のどの項目にも、次のシステム定義プロパティがあります。 使用する API に応じて、一部は直接公開されない場合があります。
システム定義のプロパティ | システム生成またはユーザー定義 | パーパス | NoSQL 用 API | Cassandra 用 API | MongoDB 用 DB API | Gremlin 用 API | Table 用 API |
---|---|---|---|---|---|---|---|
_rid |
システム生成 | 項目の一意識別子 | はい | いいえ | 番号 | 番号 | いいえ |
_etag |
システム生成 | オプティミスティック同時実行制御に使用されるエンティティ タグ | はい | いいえ | 番号 | 番号 | いいえ |
_ts |
システム生成 | 項目の最終更新のタイムスタンプ | はい | いいえ | 番号 | 番号 | いいえ |
_self |
システム生成 | 項目のアドレス指定可能な URI | はい | いいえ | 番号 | 番号 | いいえ |
id |
接続前/接続後 | 論理パーティション内のユーザーが定義した一意の名前 | はい | イエス | イエス | イエス | はい |
任意のユーザー定義のプロパティ | ユーザー定義 | API のネイティブ表現 (JSON、BSON、CQL など) のユーザー定義のプロパティ | はい | イエス | イエス | イエス | はい |
注意
id
プロパティの一意性は、各論理パーティション内で適用されます。 複数のドキュメントで、異なるパーティション キー値を持つ同じ id
プロパティ値を使用できます。
項目に対する操作
Azure Cosmos DB の項目では、次の操作をサポートします。 Azure Cosmos DB のいずれかの API を使用して操作を実行できます。
操作 | NoSQL 用 API | Cassandra 用 API | MongoDB 用 API | Gremlin 用 API | Table 用 API |
---|---|---|---|---|---|
挿入、置換、削除、アップサート、読み取り | はい | イエス | イエス | イエス | 可 |
次のステップ
Azure Cosmos DB アカウントの管理方法とその他の概念を確認します。