今日は、Azure Cosmos DBの要求ユニットについてお話ししましょう。Azure Cosmos DBでは、スループットとストレージに対して時間単位で課金されます。皆さんは、スループットをプロビジョニングして、データベースで常に十分なシステムリソースが利用できるようにする必要があります。

スループットって何ですか?

スループットとは、単位時間あたりに処理できるデータの量のことです。データベースでは、読み取りや書き込みの速度がスループットに相当します。

なるほど。じゃあ要求ユニットって何ですか?

要求ユニット(RU)は、データベース操作のコストを表す単位です。CPU、IOPS、メモリなど、データベース操作を実行するために必要なシステムリソースの消費量を表します。
下は要求ユニット(RU) の概念図となります。

要求ユニットを検出する – Training | Microsoft Learn

具体的にはどういうことですか?

要求ユニット (RU) は、Azure Cosmos DB でデータベース操作のコストを表す単位です。CPU、IOPS、メモリなどのシステムリソース消費量を正規化したものです。
データベース操作には、読み取り、挿入、アップサート、削除、クエリなどがあります。それぞれの操作は、RU を消費します。
読み取り:データベースから特定のデータを取得する操作。ポイント読み取りは、ID とパーティションキーの値で1KB 項目をフェッチする場合、1 RU のコストがかかります。
挿入:新しいデータをデータベースに追加する操作。データのサイズやインデックスの影響により、RU コストが変動します。
アップサート:データをデータベースに挿入するか、既存のデータを更新する操作。挿入と同様に、RU コストはデータのサイズやインデックスによって変動します。
削除:データベースからデータを削除する操作。RU コストはデータのサイズやインデックスによって変動します。
クエリ:データベースから複数のデータを検索・取得する操作。クエリの複雑さやデータ量によって RU コストが変動します。
これらの操作のコストは、API に関係なく、常に RU で測定されます。よって、RU を理解することで、データベース操作のコストやパフォーマンスに対する影響を把握することができます。

良く分かりました。これがコストと関係してくるのですか?

はい。例えば、1KBの項目をIDとパーティションキーの値でフェッチするポイント読み取り操作のコストは、1RUです。他のデータベース操作に対しても、同様にRUでコストが割り当てられます。

Azure Cosmos DBのアカウントの種類によって、RUの課金方法が違うんですか?

はい、そうです。アカウントの作成モードには、「プロビジョニングスループットモード」、「サーバーレスモード」、「自動スケーリングモード」の3つがあります。それぞれのモードでRUの課金方法が異なります。

プロビジョニングスループットモードってどういうモードですか?

このモードでは、アプリケーションのRUの数を秒単位でプロビジョニングします。RUの値はいつでも増やしたり減らしたりできます。スループットは、コンテナーやデータベースの細分性レベルでプロビジョニングできます。

じゃあ、サーバーレスモードはどういうモードですか?

サーバーレスモードでは、スループットをプロビジョニングする必要はありません。請求期間が終了すると、データベース操作で使用された要求ユニットの量に対して課金されます。

最後に、自動スケーリングモードについて教えてください。

自動スケーリングモードでは、使用状況に基づいてデータベースまたはコンテナーのスループットを自動的かつ瞬時にスケーリングできます。変動し予測できないトラフィックパターンを持ち、ハイパフォーマンスとスケーリングに対するSLAが必要なワークロードに最適です。

なるほど、理解できました。ありがとうございます!