Amazon DynamoDB
開発者ガイド (API バージョン 2012-08-10)

読み込み/書き込みキャパシティーモード

Amazon DynamoDB には、テーブルで読み込みおよび書き込みを処理するための読み込み/書き込みキャパシティーモードが 2 つあります。

  • オンデマンド

  • プロビジョニング済み (デフォルト、無料利用枠の対象)

読み取り/書き込みキャパシティーモードは、読み取りおよび書き込みスループットの課金方法と容量の管理方法を制御します。読み取り/書き込みキャパティーモードは、テーブルを作成するときに設定できます。後で変更することもできます。

グローバルセキュリティインデックスは、基本テーブルから読み取り/書き込みキャパシティーモードを継承します。詳細については、「読み取り/書き込みキャパシティーモードの変更時の考慮事項」を参照してください。

オンデマンドモード

Amazon DynamoDB オンデマンドは、容量計画なしで 1 秒あたりに数千ものリクエストを処理できる柔軟な請求オプションです。DynamoDB オンデマンドには、読み取りおよび書き込みリクエストのリクエストごとの支払い料金が用意されているため、使用した分だけ課金されます。

オンデマンドモードを選択すると、DynamoDB は、前に到達したトラフィックレベルまで拡張または縮小して、ワークロードを即座に受け入れることができるようにします。ワークロードのトラフィックレベルが新しいピークに達すると、DynamoDB はワークロードに対応するように迅速に対応します。オンデマンドモードを使用するテーブルは、同じ 1 桁ミリ秒のレイテンシー、サービスレベルアグリーメント (SLA) のコミットメント、DynamoDB が既に実現しているセキュリティを提供します。オンデマンドは、新しいテーブルと既存のテーブルの両方に選択できるだけでなく、コードを変更せずに既存の DynamoDB API を引き続き使用することができます。

以下の条件のいずれかに該当する場合、オンデマンドモードは適切なオプションです。

  • 不明なワークロードを含む新しいテーブルを作成する。

  • アプリケーションのトラフィックが予測不可能である。

  • わかりやすい従量課金制の支払いを希望する。

リクエストレートは、DynamoDB スループットのデフォルトテーブル制限によってのみ制限されますが、リクエストに応じて上げることができます。詳細については、「スループットのデフォルトの制限」を参照してください。

オンデマンドの使用を開始するには、テーブルを作成または更新してオンデマンドモードを使用できます。詳細については、「テーブルの基本運用」を参照してください。

24 時間ごとに 1 回、読み込み/書き込みキャパシティーモードを切り替えることができます。読み込み/書き込みキャパシティーモードを切り替えるときに考慮すべき問題については、「読み取り/書き込みキャパシティーモードの変更時の考慮事項」を参照してください。

注記

オンデマンドは、現在のところ AWS Data Pipeline、DynamoDB インポート/エクスポートツール、AWS Glue ではサポートされていません。

読み取りリクエストユニットと書き込みリクエストユニット

オンデマンドモードテーブルでは、アプリケーションに期待する読み取りおよび書き込みスループットの量を指定する必要があります。DynamoDB では、読み取りリクエストユニットと書き込みリクエストユニットの観点でアプリケーションがテーブルで実行した読み取りと書き込みに対して課金されます。

  • 1 つの読み込みリクエストユニットは、最大サイズ 4 KB の項目について、1 回の強力な整合性のある読み込みリクエスト、あるいは 2 回の結果整合性のある読み込みを表します。トランザクション読み込みリクエストでは、4 KB までの項目を 1 回読み込むのに読み込みリクエストユニットが 2 個必要です。4 KB より大きい項目を読み込む必要がある場合、DynamoDB には追加の読み込みリクエストユニットが必要です。必要な読み込みユニットの最大数は、項目のサイズと、結果整合性のある読み込みまたは強力な整合性のある読み込みが必要かどうかによって異なります。たとえば、項目のサイズが 8 KB の場合、1 回の強力な整合性のある読み込みを維持するには読み込みリクエストユニットが 2 個、結果整合性のある読み込みを選択した場合は読み込みリクエストユニットが 1 個、またはトランザクション読み込みリクエストには読み込みリクエストユニットが 4 個必要です。

    注記

    DynamoDB 読み込み整合性モデルの詳細については、「読み込み整合性」を参照してください。

  • 1 つの書き込みリクエストユニットは、最大でサイズが 1 KB までの項目について 1 回の書き込みを表します。1 KB より大きい項目を書き込む必要がある場合、DynamoDB は追加の書き込みリクエストユニットを消費する必要があります。トランザクション書き込みリクエストでは、1 KB までの項目を 1 回書き込むのに書き込みリクエストユニットが 2 個必要です。必要な書き込みリクエストユニットの合計数は、項目サイズに応じて異なります。たとえば、項目のサイズが 2 KB の場合、1 回の書き込みリクエストを維持するには書き込みリクエストユニットが 2 個、またはトランザクション書き込みリクエストには書き込みリクエストユニットが 4 個必要です。

DynamoDB オンデマンドが使用可能な AWS リージョンのリストについては、「Amazon DynamoDB の料金表」を参照してください。

ピークトラフィックとスケーリングプロパティ

オンデマンドキャパシティーモードを使用する DynamoDB テーブルは、アプリケーションのトラフィックボリュームに自動的に対応します。オンデマンドキャパシティーモードは、テーブルにおける前のピークトラフィックの最大 2 倍まで瞬時に対応します。たとえば、アプリケーションのトラフィックパターンにおいて、強力な整合性のある読み込みが 1 秒あたり 25,000 ~ 50,000 回の間で変化し、前のトラフィックピークの読み込みが 1 秒あたり 50,000 回の場合、オンデマンドキャパシティーモードは維持されているトラフィックである 1 秒あたり最大 100,000 回の読み取りに瞬時に対応します。アプリケーションが 1 秒あたり 100,000 回の読み込みのトラフィックを維持する場合、そのピークは新しい前のピークになり、その後のトラフィックは 1 秒あたり最大 200,000 回の読み込みに到達することができます。

テーブルにおける前のピークの 2 倍以上が必要な場合、DynamoDB はトラフィックボリュームが増加する自動的に多くの容量を割り当て、ワークロードがスロットリングされないようにします。ただし、30 分以内に前のピークの 2 倍を超えた場合、スロットリングが発生する可能性があります。たとえば、アプリケーションのトラフィックパターンにおいて、強力な整合性のある読み込みが 1 秒あたり 25,000 ~ 50,000 回の間で変化し、前に到達したトラフィックピークの読み込みが 1 秒あたり 50,000 回の場合、1 秒あたり 100,000 回を超える読み込みまで上げる前に 30 分以上トラフィック増加の間隔をあけることが DynamoDB により推奨されます。

オンデマンドキャパシティーモードの初期スループット

既存のテーブルを最近初めてオンデマンドキャパシティーモードに切り替えた場合や、オンデマンドキャパシティーモードが有効な新しいテーブルを作成した場合、テーブルがオンデマンドキャパシティーモードを使用して以前にトラフィックを処理していなくても、テーブルの前のピーク設定は以下のようになります。

  • オンデマンドキャパシティーモードで新たに作成されたテーブル: 前のピークは、書き込みリクエストユニットが 2,000 個または読み込みリクエストユニットが 6,000 個です。前のピークの最大 2 倍まで即座に増やすことができます。これにより、新たに作成されたオンデマンドテーブルが書き込みリクエストユニットを最大 4,000 個、読み込みリクエストユニットを最大 12,000 個、またはこれら 2 つの線形組み合わせを処理できます。

  • オンデマンドキャパシティーモードに切り替えられた既存のテーブル: 前のピークは、テーブルにプロビジョニングされた前の最大書き込みキャパシティーユニットおよび読み込みキャパシティーユニット、またはオンデマンドキャパシティーモードで新しく作成されたテーブルの設定の、どちらか高い方です。

読み込み/書き込みキャパシティーモードの切り替え時のテーブルの動作

テーブルをプロビジョンドキャパシティーモードからオンデマンドキャパシティーモードに切り替えると、DynamoDB はテーブルおよびパーティションの構造にいくつかの変更を加えます。この処理には数分かかることもあります。切り替え期間中、テーブルは以前にプロビジョニングされた書き込みキャパシティーユニットおよび読み込みキャパシティーユニットの両方と整合性のあるスループットを提供します。オンデマンドキャパシティーモードからプロビジョンドキャパシティーモードに戻すと、テーブルは、テーブルがオンデマンドキャパシティーモードに設定されたときに到達した前のピークと整合性のあるスループットを提供します。

プロビジョニングモード

プロビジョニングモードを選択した場合、アプリケーションに必要な 1 秒あたりの読み込みと書き込みの回数を指定します。Auto Scaling を使用すると、トラフィックの変更に応じて、テーブルのプロビジョンドキャパシティーを自動的に調整できます。これにより、コストの予測可能性を得るため、定義されたリクエストレート以下に維持されるように DynamoDB を制御することができます。

以下の条件のいずれかに該当する場合、プロビジョニングモードは適切なオプションです。

  • アプリケーションのトラフィックが予測可能である。

  • トラフィックが一定した、または徐々に増加するアプリケーションを実行する。

  • キャパシティーの要件を予測してコストを管理できる。

読み込みキャパシティーユニットと書き込みキャパシティーユニット

プロビジョニングモードのテーブルでは、読み込みキャパシティーユニット (RCU) と書き込みキャパシティーユニット (WCU) の観点でスループットキャパシティーを指定できます。

  • 1 つの読み込みキャパシティーユニットは、最大サイズ 4 KB の項目について、1 秒あたり 1 回の強力な整合性のある読み込み、あるいは 1 秒あたり 2 回の結果整合性のある読み込みを表します。トランザクション読み込みリクエストでは、4 KB までの項目を 1 秒あたりに 1 回読み込むのに読み込みキャパシティーユニットが 2 個必要です。4 KB より大きい項目を読み込む必要がある場合、DynamoDB は追加の読み込みキャパシティーユニットを消費する必要があります。必要な読み込みキャパシティーユニットの最大数は、項目のサイズと、結果整合性のある読み込みまたは強力な整合性のある読み込みが必要かどうかによって異なります。たとえば、項目のサイズが 8 KB の場合、1 秒あたり 1 回の強力な整合性のある読み込みを維持するには読み込みキャパシティーユニットが 2 個、結果整合性のある読み込みを選択した場合は読み込みキャパシティーユニットが 1 個、またはトランザクション読み込みリクエストには読み込みキャパシティーユニットが 4 個必要です。詳細については、「読み込みでのキャパシティーユニットの消費」を参照してください。

    注記

    DynamoDB 読み込み整合性モデルの詳細については、「読み込み整合性」を参照してください。

  • 1 つの書き込みキャパシティーユニットは、最大でサイズが 1 KB までの項目について、1 秒あたり 1 回の書き込みを表します。1 KB より大きい項目を書き込む必要がある場合、DynamoDB は追加の書き込みキャパシティーユニットを消費する必要があります。トランザクション書き込みリクエストでは、1 KB までの項目を 1 秒あたり 1 回書き込むのに書き込みキャパシティーユニットが 2 個必要です。必要な書き込みキャパシティーユニットの合計数は、項目サイズに応じて異なります。たとえば、項目のサイズが 2 KB の場合、1 秒あたり 1 回の書き込みリクエストを維持するには書き込みキャパシティーユニットが 2 個、またはトランザクション書き込みリクエストには書き込みキャパシティーユニットが 4 個必要です。詳細については、「書き込みでのキャパシティーユニットの消費」を参照してください。

重要

オンデマンドテーブルで DescribeTable を呼び出すと、読み込みキャパシティーユニットと書き込みキャパシティーユニットが 0 に設定されます。

アプリケーションでこれより大きな項目の読み込みまたは書き込みが行われると (上限は DynamoDB の最大項目サイズである 400 KB)、消費されるキャパシティーユニットがさらに増えます。

たとえば、6 個の読み込みキャパシティーユニットと 6 個の書き込みキャパシティーユニットを使用してプロビジョニング済みテーブルを作成したとします。これらの設定により、アプリケーションで次のことが可能になります。

  • 1 秒あたり 24 KB までの強力な整合性のある読み込みを実行する (4 KB × 6 読み込みキャパシティーユニット)

  • 1 秒あたり 48 KB までの結果的に整合性のある読み込みを実行する (2 倍の読み込みスループット)

  • 1 秒あたり 3 KB までのトランザクション読み込みリクエストを実行する

  • 1 秒あたり 6 KB までの書き込みを実行する (1 KB × 6 書き込みキャパシティーユニット)

  • 1 秒あたり 3 KB までのトランザクション書き込みリクエストを実行する

詳細については、「プロビジョニングされたテーブルでのスループット設定の管理」を参照してください。

プロビジョニングされたスループットとは、テーブルまたはインデックスでアプリケーションが消費できるキャパシティーの上限です。テーブルまたはインデックスでプロビジョニングされたスループットキャパシティーを超過したアプリケーションは、リクエストスロットリングの対象になります。

スロットリングは、アプリケーションで大量のキャパシティーユニットが消費されるのを防ぎます。リクエストがスロットリングされると、そのリクエストは HTTP 400 コード (Bad Request) と ProvisionedThroughputExceededException で失敗します。AWS SDK には、スロットリングされたリクエストを再試行するための組み込みサポートがあります (「エラーの再試行とエクスポネンシャルバックオフ」を参照)。そのため、このロジックを自身で記述する必要はありません。

AWS マネジメントコンソールを使用すると、プロビジョニングされたスループットと実際のスループットをモニタリングしたり、必要に応じてスループットの設定を変更したりできます。

DynamoDB Auto Scaling

DynamoDB Auto Scaling では、テーブルと グローバルセカンダリインデックス のスループットキャパシティーが自動的に管理されます。読み込みおよび書き込みのキャパシティーユニットの範囲 (上限と下限) と、その範囲内のターゲット使用率を定義します。アプリケーションのワークロードが増減しても DynamoDB Auto Scaling により、ターゲット使用率が維持されます。

DynamoDB Auto Scaling では、急激なトラフィック増加をリクエストのスロットリングなしに処理するために、テーブルまたは グローバルセカンダリインデックス のプロビジョニングされた読み込みキャパシティーと書き込みキャパシティーを増やすことができます。ワークロードが減ると、DynamoDB Auto Scaling はスループットを低下させ、未使用のプロビジョニングされたキャパシティーに料金が発生しないようにします。

注記

AWS マネジメントコンソール を使用してテーブルや グローバルセカンダリインデックスを作成する場合、DynamoDB Auto Scaling はデフォルトで有効になります。

Auto Scaling の設定は、コンソール、AWS CLI、またはいずれかの AWS SDK を使用していつでも管理できます。

詳細については、「DynamoDB Auto Scaling によるスループットキャパシティの自動管理」を参照してください。

リザーブドキャパシティ

DynamoDB のお客様は、Amazon DynamoDB 料金表に説明されているように、リザーブドキャパシティーを事前に購入することができます。リザーブドキャパシティーでは、1 回限りの前払い料金を支払い、期間中、最小使用レベルを支払う契約を結びます。読み込みキャパシティーユニットおよび書き込みキャパシティーユニットを事前に予約することで、オンデマンドのプロビジョニングされたスループット設定と比べて大幅なコスト削減を実現できます。

注記

リザーブドキャパシティーは、オンデマンドモードでは使用できません。

リザーブドキャパシティーを管理するには、DynamoDB コンソールに移動し、[リザーブドキャパシティー] を選択します。

注記

ユーザーがリザーブドキャパシティーを表示または購入できないようにしながら、コンソールの他の部分にはアクセスを許可することができます。詳細については、「Amazon DynamoDB に対する認証とアクセスコントロール」の「リザーブドキャパシティの提供タイプを購入するためのアクセス許可」を参照してください。