Azure Cosmos DB のさまざまな API についてよく寄せられる質問

適用対象: SQL API Cassandra API Gremlin API Table API MongoDB 用 Azure Cosmos DB API

一般的な FAQ

Azure Cosmos DB の一般的なユース ケースを教えてください。

Azure Cosmos DB は、自動スケール、予測可能なパフォーマンス、ミリ秒レベルの高速応答時間、スキーマフリー データに対してクエリを実行できることが重要である、新しい Web、モバイル、ゲーム、IoT の各アプリケーションに適しています。 Azure Cosmos DB は迅速な開発に役立ち、アプリケーション データ モデルの継続的な反復をサポートします。 ユーザーが生成したコンテンツとデータを管理するアプリケーションは、Azure Cosmos DB の一般的なユース ケースです。

Azure Cosmos DB では、予測可能なパフォーマンスをどのようにして実現していますか?

要求ユニット (RU) とは、Azure Cosmos DB におけるスループットの単位です。 1 RU のスループットは、1 KB のドキュメントを取得するスループットに相当します。 Azure Cosmos DB におけるすべての操作 (読み取り、書き込み、SQL クエリ、ストアド プロシージャの実行など) には、操作を完了するために必要なスループットに基づいて明確な RU 値が設定されています。 CPU、IO、メモリや、これらがアプリケーションのスループットに及ぼす影響について考えるのではなく、RU という 1 つの単位を基にして考えることができます。

各 Azure Cosmos コンテナーは、1 秒あたりのスループットを表す RU を単位として、プロビジョニング スループットを使用して構成できます。 あらゆる規模のアプリケーションで、個々の要求のベンチマークを実行して RU 値を測定し、すべての要求の要求ユニットの合計に対処できるようにコンテナーをプロビジョニングできます。 アプリケーションのニーズの進化に合わせて、コンテナーのスループットをスケールアップまたはスケールダウンすることもできます。 要求ユニットの詳細とコンテナーのニーズを判断する方法については、スループット計算ツールをお試しください。

Azure Cosmos DB は、キー/値、多桁式、ドキュメント、グラフなどのさまざまなデータ モデルをどのようにサポートしていますか?

キー/値 (テーブル)、多桁式、ドキュメント、およびグラフ データ モデルは、Azure Cosmos DB のベースである ARS (アトム、レコード、およびシーケンス) 設計のため、すべてネイティブにサポートされています。 アトム、レコード、およびシーケンスは、さまざまなデータ モデルに容易にマップしたり投影したりできます。 モデルのサブセット用の API は今すぐ使用でき (SQL、MongoDB、Table、Gremlin)、追加のデータ モデルに固有のその他の API は将来使用可能になります。

Azure Cosmos DB は、開発者にスキーマやセカンダリ インデックスを要求することなく、取り込んだすべてのデータを自動的にインデックス作成できるスキーマ独立型インデックス作成エンジンを備えています。 このエンジンは、インデックスおよびクエリ処理サブシステムから記憶域のレイアウトを分離する一連の論理インデックス レイアウト (転置、多桁式、ツリー) に依存しています。 さらに Cosmos DB は、一連のワイヤ プロトコルと API を拡張可能な方法でサポートし、それらをコア データ モデル (1) と論理インデックス レイアウト (2) に効率的に変換することによって複数のデータ モデルをネイティブにサポートできるようにする独自の能力も備えています。

複数の API を使用して自分のデータにアクセスできますか?

Azure Cosmos DB は、Microsoft によってグローバルに配布されるマルチモデル データベース サービスです。 マルチモデルでは、Azure Cosmos DB で複数の API と複数のデータ モデルがサポートされますが、API が異なると、ストレージやワイヤ プロトコルに使用されるデータ形式が異なります。 たとえば、SQL では JSON が使用され、MongoDB では BSON が使用され、Table では EDM が使用され、Cassandra では CQL が使用され、Gremlin では JSON 形式が使用されます。 そのため、特定のアカウントでデータにアクセスするときは、常に同じ API を使用することをお勧めします。

相互運用が可能な Gremlin と SQL API を除き、各 API は独立して動作します。

Azure Cosmos DB は HIPAA に準拠していますか?

はい。Azure Cosmos DB は HIPAA に準拠しています。 HIPAA は、個別に識別できる医療情報の使用、開示、および保護するための要件を確立しています。 詳細については、Microsoft トラスト センターを参照してください。

Azure Cosmos DB のストレージの制限を教えてください。

Azure Cosmos DB でコンテナーが格納できるデータの合計量に制限はありません。

Azure Cosmos DB のスループットの制限を教えてください。

Azure Cosmos DB でコンテナーがサポートできるスループットの総量に制限はありません。 基本的な考え方は、十分な数のパーティション キーにワークロードをほぼ均等に分散させることです。

ダイレクトとゲートウェイの接続モードは暗号化されますか?

はい、どちらのモードも常に完全に暗号化されます。

Azure Cosmos DB の料金はいくらですか?

詳細については、Azure Cosmos DB の価格の詳細に関するページをご覧ください。 Azure Cosmos DB の利用料金は、プロビジョニング済みコンテナーの数、コンテナーがオンラインであった時間数、各コンテナーのプロビジョニング スループットによって決まります。

無料アカウントはありますか?

はい。契約することなく、期間限定のアカウントに無料でサインアップできます。 サインアップするには、「Azure Cosmos DB を無料で試す」にアクセスするか、Try Azure Cosmos DB に関する FAQ セクションで詳細を確認してください。

Azure を初めてお使いの場合は、Azure の無料アカウントにサインアップできます。このアカウントには、Azure のすべてのサービスを試すための試用期間 (30 日) とクレジットが与えられます。 Visual Studio サブスクリプションを持っている場合は、無料の Azure クレジットを利用して、すべての Azure サービスを使うこともできます。

また、Azure Cosmos DB Emulator を使用すると、Azure サブスクリプションを作成しなくても、ローカルでのアプリケーションの開発とテストを無料で行うことができます。 Azure Cosmos DB Emulator でのアプリケーションの動作に満足できたら、クラウドでの Azure Cosmos DB アカウントの使用に切り替えることができます。

Azure Cosmos DB に関するその他の支援を得るにはどうすればよいですか?

技術的な質問をするには、次の 2 つの質問および回答フォーラムのいずれかに投稿することができます。

アカウントを使用して問題を修正するには、Azure Portal でサポート要求を提出します。

Try Azure Cosmos DB サブスクリプション

現在、一定期間に限り、サブスクリプション不要で、課金も契約もなしで Azure Cosmos DB をご利用いただけます。 Try Azure Cosmos DB サブスクリプションにサインアップするには、「Azure Cosmos DB を無料で試す」にアクセスし、個人用 Microsoft アカウント (MSA) を使用してください。 このサブスクリプションは Azure 無料試用版とは別のものであり、Azure 無料試用版または Azure 有料サブスクリプションと併用できます。

Try Azure Cosmos DB サブスクリプションは、Azure Portal で、ユーザー ID に関連付けられた他のサブスクリプションの横に表示されます。

Try Azure Cosmos DB サブスクリプションには、次の条件が適用されます。

  • アカウント アクセスは、個人用 Microsoft アカウント (MSA) に許可することができます。 Azure Active Directory (Azure AD) アカウントや会社の Azure AD テナントに属するアカウントは使用しないでください。これらのアカウントには、アクセスの許可をブロックする制限が設定されている場合があります。
  • SQL、Gremlin API、Table アカウントのサブスクリプションあたり 1 つのプロビジョニング スループットのコンテナー
  • MongoDB アカウントのサブスクリプションあたり最大 3 つのプロビジョニング スループットのコレクション
  • サブスクリプションあたり 1 つのプロビジョニング スループットのデータベース。 プロビジョニング スループットのデータベースには、任意の数のコンテナーを含めることができます。
  • 10 GB のストレージ容量。
  • グローバルなレプリケーションは、米国中部、北ヨーロッパ、東南アジアという Azure リージョンで利用可能です
  • コンテナー レベルでプロビジョニングされている場合、最大 5 K RU/s のスループット。
  • データベース レベルでプロビジョニングされている場合、最大 20 K RU/s のスループット。
  • サブスクリプションの有効期限は 30 日後に切れます。これは合計で最大 31 日まで延長できます。 有効期限が切れると、含まれる情報は削除されます。
  • Try Azure Cosmos DB アカウントでは Azure サポート チケットを作成できません。ただし、既存のサポート プランをご利用のサブスクライバーにはサポートが提供されます。

Azure Cosmos DB の設定

Azure Cosmos DB にサインアップするにはどうすればよいですか?

Azure Cosmos DB は Azure Portal で利用できます。 まず、Azure サブスクリプションにサインアップします。 サインアップ後、Azure サブスクリプションに Azure Cosmos DB アカウントを追加できます。

主キーとは

主キーは、アカウントのすべてのリソースにアクセスするためのセキュリティ トークンです。 キーを保持する個人には、データベース アカウント内のすべてのリソースへの読み取り/書き込みアクセスが許可されます。 主キーを配布するときには十分な注意が必要です。 プライマリ主キーとセカンダリ主キーは、[Azure portal][azure-portal] の [キー] ブレードで入手できます。 リソース キーの詳細については、「 アクセス キーを表示、コピー、および再生成する」を参照してください。

PreferredLocations として設定できるリージョンを教えてください。

PreferredLocations 値は、Cosmos DB を利用できる Azure リージョンのいずれかに設定できます。 利用可能なリージョンの一覧については、「Azure リージョン」をご覧ください。

Azure のデータ センター経由で世界中にデータを配布するときに注意すべきことはありますか?

Azure Cosmos DB は、「Azure リージョン」ページに記載されているすべての Azure リージョンにわたって存在します。 Azure Cosmos DB はコア サービスであるため、すべての新しいデータ センターに Azure Cosmos DB が存在することになります。

リージョンを設定するときは、Azure Cosmos DB では主権のあるクラウドと政府機関のクラウドが重視されることに注意してください。 つまり、独立リージョンにアカウントを作成した場合、その独立リージョンの外部にレプリケートすることはできません。 同様に、外部のアカウントから他の独立した場所へのレプリケーションを有効にすることはできません。

コンテナー レベルのスループットのプロビジョニングからデータベース レベルのスループットのプロビジョニングに切り替えられますか? またはその逆はどうですか

コンテナー レベルとデータベース レベルのスループットのプロビジョニングは別個のサービスであり、これらのサービス間で切り替えるには移行元から移行先へのデータの移行が必要になります。 つまり、新しいデータベースまたは新しいコンテナーを作成した後、Bulk Executor ライブラリまたは Azure Data Factory を使用してデータを移行する必要があります。

Azure CosmosDB では、時系列分析がサポートされていますか。

はい。Azure CosmosDB では、時系列分析がサポートされています。時系列パターンのサンプルについては、こちらをご覧ください。 このサンプルでは、変更フィードを利用し、時系列データを集計したビューを構築する方法をご確認いただけます。 Spark Streaming やその他のストリーム データ プロセッサを使用することでこの手法を拡張できます。

Azure Cosmos DB にはどのようなサービス クォータとスループット制限がありますか?

詳細については、Azure Cosmos DB のサービス クォータコンテナーおよびデータベースごとのスループット制限に関する記事を参照してください。

SQL API についてよく寄せられる質問

SQL API に対する開発を開始するにはどうすればよいですか?

まず、Azure サブスクリプションにサインアップする必要があります。 Azure サブスクリプションにサインアップしたら、SQL API コンテナーを Azure サブスクリプションに追加できます。 Azure Cosmos DB アカウントを追加する手順については、「Azure Cosmos アカウントを作成する」を参照してください。

SDK が利用可能です。 開発者は、RESTful HTTP API を使用して、さまざまなプラットフォームや言語で Azure Cosmos DB リソースを操作することもできます。

開発作業を速やかに開始するために、既製のサンプルを利用できますか?

SQL API の .NETJavaNode.jsPython の各 SDK のサンプルを GitHub で入手できます。

SQL API データベースはスキーマフリー データをサポートしていますか?

はい。SQL API では、スキーマ定義やヒントを必要とせずに、アプリケーションが任意の JSON ドキュメントを格納できます。 データは、Azure Cosmos DB SQL クエリ インターフェイスを使用してクエリにすぐに使用できます。

SQL API は ACID トランザクションをサポートしていますか?

はい。SQL API では、JavaScript のストアド プロシージャとトリガーとして表現されるクロス ドキュメント トランザクションをサポートしています。 トランザクションは、各コンテナー内の単一のパーティションを対象とし、他の同時実行されるコードおよびユーザー要求から "完全に" 分離された ACID セマンティクスで実行されます。 JavaScript アプリケーション コードのサーバー側実行により例外がスローされた場合は、トランザクション全体がロールバックされます。

コンテナーとは何ですか?

コンテナーとは、ドキュメントと、関連する JavaScript アプリケーション ロジックのグループです。 コンテナーは課金対象のエンティティであり、そのコストは、スループットと使用しているストレージによって決まります。 コンテナーは、1 つ以上のパーティションまたはサーバーにまたがって存在することができ、拡張性があるので、対応できるストレージまたはスループットの量には実質的に制限はありません。

  • SQL API では、リソースはコンテナーと呼ばれます。
  • Cosmos DB の MongoDB 用 API アカウントの場合、コンテナーは Collection にマップされます。
  • Cassandra および Table API アカウントの場合、コンテナーはテーブルにマップされます。
  • Gremlin API アカウントの場合、コンテナーはグラフにマップされます。

コンテナーは、Azure Cosmos DB の課金エンティティでもあります。 各コンテナーは、プロビジョニング済みスループットと使用されたストレージ領域に基づいて時間単位で課金されます。 詳細については、「Azure Cosmos DB の価格」を参照してください。

どのようにしてデータベースを作成しますか?

データベースは、Azure portal (「コンテナーの追加」を参照)、Azure Cosmos DB SDK のいずれか、または REST API を使用して作成できます。

どのようにしてユーザーおよびアクセス許可を設定しますか?

ユーザーとアクセス許可は、Cosmos DB API SDK または REST API のいずれかを使用して作成できます。

SQL API は SQL をサポートしていますか?

SQL API アカウントでサポートされる SQL クエリ言語は、SQL Server でサポートされるクエリ機能の強化版サブセットです。 Azure Cosmos DB の SQL クエリ言語は、高度な階層型の関係演算子と、JavaScript ベースのユーザー定義関数 (UDF) による機能拡張を提供します。 JSON 文法では、ラベル付きノードが配置されたツリーとして JSON ドキュメントをモデル化できます。これは、Azure Cosmos DB の自動インデックス作成手法と Azure Cosmos DB の SQL クエリ言語の両方で使用されます。 SQL 文法の使用方法については、[SQL Query][query] に関する記事をご覧ください。

SQL API は SQL 集計関数をサポートしていますか?

SQL API は、SQL 文法の COUNTMINMAXAVGSUM の各集計関数を使用した、あらゆるスケールでの低待機時間の集計をサポートしています。 詳細については、「集計関数」をご覧ください。

SQL API はどのようにしてコンカレンシーを提供しますか?

SQL API は、HTTP エンティティ タグ (ETag) によるオプティミスティック コンカレンシー (OCC) をサポートしています。 すべての SQL API リソースに ETag があり、ドキュメントが更新されるたびにサーバーで ETag が設定されます。 すべての応答メッセージに ETag ヘッダーと現在の値が含まれます。 ETag を If-Match ヘッダーと共に使用することで、サーバーはリソースを更新する必要があるかどうかを判断できるようになります。 If-Match 値は、チェック対象の ETag 値です。 対象の ETag 値がサーバーの ETag 値と一致する場合に、リソースが更新されます。 ETag が最新ではない場合、サーバーは操作を拒否して "HTTP 412 Precondition failure" 応答コードを返します。 この場合、クライアントは、リソースを再フェッチしてリソースの最新の ETag 値を取得します。 また、ETag を If-None-Match ヘッダーと共に使用すると、リソースの再フェッチが必要かどうかを判断できます。

.NET でオプティミスティック コンカレンシーを使用するには、 AccessCondition クラスを使用します。 .NET サンプルについては、GitHub にある DocumentManagement サンプルの Program.cs を参照してください。

どのようにして SQL API のトランザクションを実行しますか?

SQL API は、JavaScript のストアド プロシージャとトリガーによる、統合された言語のトランザクションをサポートしています。 スクリプト内のすべてのデータベース操作は、スナップショット分離下で実行されます。 単一パーティション コンテナーの場合は、コンテナーが実行対象となります。 コンテナーがパーティション分割されている場合は、コンテナー内の同じパーティション キー値を持つドキュメントが実行対象となります。 ドキュメント バージョン (ETag) のスナップショットは、トランザクションの開始時に取得され、スクリプトが成功された場合のみコミットされます。 JavaScript がエラーをスローした場合、トランザクションはロールバックされます。 詳細については、「Azure Cosmos DB のサーバー側プログラミング」を参照してください。

ドキュメントを Cosmos DB に一括挿入するにはどうすればよいですか?

Azure Cosmos DB へのドキュメントの一括挿入は、次のいずれかの方法で実行できます。

SQL API はリソース リンク キャッシュをサポートしていますか?

はい。Azure Cosmos DB は RESTful サービスであるため、リソース リンクは不変であり、キャッシュできます。 SQL API クライアントでは、リソースのようなドキュメントやコンテナーに対する読み取りに "If-None-Match" ヘッダーを指定し、サーバー バージョンが変更されたらローカル コピーを更新できます。

SQL API のローカル インスタンスは使用できますか?

はい。 Azure Cosmos DB Emulator には、Cosmos DB サービスの高忠実度エミュレーションが用意されています。 JSON ドキュメントの作成とクエリ、コレクションのプロビジョニングとスケーリング、ストアド プロシージャとトリガーの実行のサポートなど、Azure Cosmos DB と同じ機能がサポートされています。 Azure Cosmos DB Emulator を使用してアプリケーションの開発とテストを行い、Azure Cosmos DB の接続エンドポイントの構成を 1 つ変更するだけで、世界規模で Azure にデプロイできます。

ポータルのデータ エクスプローラーから表示したとき、ドキュメント内の長い浮動小数点値が丸められるのはなぜですか?

これは、JavaScript の制限です。 JavaScript では IEEE 754 で指定されている倍精度浮動小数点形式の値が使用されるため、安全に保持できるのは -(253 - 1) から 253 - 1 (つまり 9007199254740991) の範囲の値だけです。

アクセス許可はオブジェクト階層のどこで許可されますか?

ResourceTokens の使用によるアクセス許可の作成は、コンテナー レベルとその子孫 (ドキュメントや添付ファイルなど) で許可されます。 これは、データベースまたはアカウント レベルでのアクセス許可の作成は、現時点では許可されないことを示唆しています。

次のステップ

他の API に関してよく寄せられる質問については、以下を参照してください。