料金の例
このページでは、最も一般的なシナリオで課金単位がどのように計算されるかの例を示します。各クエリで処理されるデータは、クエリプラン、データの形状、使用可能なインデックスなどの要因によって異なる場合があります。
特定のクエリの費用とパフォーマンスをより深く理解するには、Query Explain 機能を使用することをおすすめします。
読み取りオペレーション
ほとんどの読み取りオペレーションでは、特定のドキュメントのポイント読み取りを実行するか、識別子に基づいてデータの範囲をスキャンします。読み取りオペレーションでは読み取りユニットを消費します。読み取りユニットは 4 KiB トランシェで計算されます。次の例をご覧ください。
ポイント読み取り
ポイント読み取りの課金の例:
- 1 つの 1 KiB ドキュメントのポイント読み取り。消費量: 読み取りユニット 1 個
- 単一の 4 KiB ドキュメントのポイント読み取り。消費量: 読み取りユニット 1 個
- 1 つの 1 MiB ドキュメントのポイント読み取り。消費量: 読み取りユニット 256 個
- 100 個のドキュメントのポイント読み取り(各 1 KiB)。消費量: 読み取りユニット 100 個
スキャン
次の例には、ドキュメントまたはインデックス エントリをスキャンするシナリオが含まれています。
ドキュメントのスキャン
- 100 個のドキュメント(それぞれ 1 KiB)をスキャンするクエリ。消費量: 読み取りユニット 25 個
インデックスのスキャン
スキャンする対象がドキュメントかインデックスかに関係なく、スキャン費用(バイト単位)は同じです。ただし、インデックス エントリのサイズは小さくなることがよくあります。そのため、多くの場合、より費用対効果の高いデータ スキャン方法を提供できます。
- 100 個のインデックス エントリ(それぞれ 1 KiB)をスキャンするクエリ。消費量: 読み取りユニット 25 個。
- 100 個のインデックス エントリ(それぞれ 128 バイト)をスキャンするクエリ。消費量: 読み取りユニット 4 個。
ドキュメントまたはインデックス エントリの最小サイズ
状況によっては、クエリを満たすためにドキュメントやインデックス エントリの内容を読み取る必要がない場合があります。これには、コレクション内のドキュメントの総数をカウントするなどの単純なカウントクエリが含まれます。このような状況では、スキャンされたアイテムごとに最小コストの 32 バイトが適用されます。
- コレクション内のドキュメント数をカウントします。クエリはコレクション内の 1,000 個のアイテムをスキャンします。消費量: 読み取りユニット 8 個。
スキャンとポイント読み取りの組み合わせ
多くのクエリは、オペレーションを満たすためにスキャンとポイント読み取りを組み合わせて実行します。
- 128 個のインデックス エントリ(それぞれ 256 バイト)をスキャンし、128 個のドキュメント(それぞれ 4 KiB)のポイント読み取りを実行するクエリ。消費量: 読み取りユニット 136 個(内訳は次のとおり)。
- ポイント読み取りの読み取りユニット 128 個
- インデックス スキャン用の読み取りユニット 8 個
Query Explain
Query Explain を使用すると、データベースがクエリを実行する方法を理解できます。提供された詳細情報は、クエリの最適化に役立ちます。
Query Explain を使用する場合は、次の費用が適用されます。
- クエリを実行する Query Explain: クエリ費用が適用されます。
- プランのみのオプションを使用する Query Explain。消費量: 読み取りユニット 1 個(クエリの最小コスト)
書き込みオペレーション
書き込みオペレーション(作成、更新、削除)は、オペレーション中に作成、変更、削除されるドキュメントとインデックスのサイズに基づいて課金されます。書き込みオペレーションでは書き込みユニットを消費します。書き込みユニットは 1 KiB トランシェで計算されます。
ドキュメント ID による更新などの単純な書き込みオペレーションでは、書き込みの費用のみが発生します。オペレーションを満たすためにクエリを必要とする書き込みオペレーションでは、クエリに関連する読み取り費用も発生します。
次の例をご覧ください。
作成
- インデックスのない 10 KiB の新しいドキュメントを作成します。消費量: 書き込みユニット 10 個
- コレクションに 256 バイトのインデックス エントリが 1 つある 1 KiB のドキュメントを作成します。消費量: 書き込みユニット 2 個
更新
- ドキュメント ID で 10 KiB のドキュメントを検索し、コレクションにインデックスがない状態で更新します。消費量: 書き込みユニット 10 個
- ドキュメント ID で 1 KiB のドキュメントを検索し、256 バイトのインデックス エントリで 1 つのフィールドを更新します。消費量: 書き込みユニット 3 個。注: この状況でインデックス エントリを更新すると、ユニットの書き込み 2 件が消費されます。1 件はインデックス エントリの削除、もう 1 件はインデックス エントリの再作成に使用されます。
- ドキュメント ID で 1 KiB のドキュメントを検出します。更新は行いません(変更なし)。消費量: 書き込みユニット 1 個(書き込み費用最小)
- コレクション内のすべての 1 KiB ドキュメントをクエリして 1,000 個のドキュメントをスキャンし、コレクションにインデックスのない新しい 256 バイトのフィールドを挿入します。読み取りユニット 1,000 個と 書き込みユニット 1,000 個。
削除
- コレクションに 1 つのインデックスがある 1 KiB のドキュメントを削除します。消費量: 書き込みユニット 2 個
- コレクションにインデックスがない 1 KiB のドキュメントを削除します。消費量: 書き込みユニット 1 個
インデックスのビルド
インデックスのビルドでは、ビルド オペレーション中に作成または変更されたインデックス エントリに対して課金されます。これらの費用は、インデックス定義が追加または削除されるたびに発生します。インデックスエントリは書き込みと同じ方式で課金され、1KiB あたり 1 個の書き込みユニットが発生します。
- 500 個のドキュメントを含むコレクションの新しいインデックスを作成します。作成されるインデックス エントリはそれぞれ 1 KiB です。書き込みユニット 500 個を消費します。
- 500 個のドキュメントを含むコレクションの既存のインデックスを削除します。削除されるインデックス エントリはそれぞれ 1 KiB です。書き込みユニット 500 個を消費します。