メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

読み取りと書き込みのスループットキャパシティー

Amazon DynamoDB でテーブルやインデックスを作成する際には、読み込みアクティビティと書き込みアクティビティのキャパシティー要件を指定する必要があります。スループットキャパシティーを事前に定義することにより、アプリケーションの読み込みアクティビティと書き込みアクティビティに必要なリソースを DynamoDB で予約して、一貫した低レイテンシーのパフォーマンスを確保できます。

スループットキャパシティーは、読み込みキャパシティーユニットと書き込みキャパシティーユニットを単位として指定します。

  • 1 つの読み込みキャパシティーユニットは、最大サイズ 4 KB の項目について、1 秒あたり 1 回の強力な整合性のある読み込み、あるいは 1 秒あたり 2 回の結果的に整合性のある読み込みを表します。4 KB より大きい項目を読み込む必要がある場合、DynamoDB は追加の読み込みキャパシティーユニットを消費する必要があります。必要な読み込みキャパシティーユニットの最大数は、項目のサイズと、結果整合性のある読み込みまたは強力な整合性のある読み込みが必要かどうかによって異なります。

  • 1 つの書き込みキャパシティーユニットは、最大でサイズが 1 KB の項目について、1 秒あたり 1 回の書き込みを表します。1 KB より大きい項目を書き込む必要がある場合、DynamoDB は追加の書き込みキャパシティーユニットを消費する必要があります。必要な書き込みキャパシティーユニットの合計数は、項目サイズに応じて異なります。

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

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

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

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

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

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

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

DynamoDB には、スループットを管理するための次のようなメカニズムが用意されています。

  • DynamoDB Auto Scaling

  • プロビジョニングされたスループット

  • リザーブドキャパシティ

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 Auto Scaling を使用しない場合は、スループットの要件を手動で定義する必要があります。プロビジョニングされたスループットとは、テーブルまたはインデックスでアプリケーションが消費できるキャパシティーの上限です。プロビジョニングされたスループットの設定を超過したアプリケーションは、リクエストスロットリングの対象になります。

たとえば、テーブルから 1 秒あたり 80 項目を読み込むとします。項目のサイズは 3 KB で、強力な整合性のある読み込みが必要です。このシナリオでは、読み込みごとに 1 つのプロビジョニングされた読み込みキャパシティーユニットが必要です。これを判断するには、次の例に示すようにオペレーションの項目サイズを 4 KB で除算し、次に最も近い整数に切り上げます。

  • 3 KB / 4 KB = 0.75 (1 読み込みキャパシティーユニット)

このシナリオでは、テーブルのプロビジョニングされた読み込みスループットを 80 読み込みキャパシティーユニットに設定する必要があります。

  • 1 読み込みキャパシティーユニット/項目 × 80 読み込み/秒 = 80 読み込みキャパシティーユニット

ここで、テーブルに 1 秒あたり 100 項目を書き込み、項目のサイズが 512 バイトであるとします。このシナリオでは、書き込みごとに 1 つのプロビジョニングされた書き込みキャパシティーユニットが必要です。これを判断するには、オペレーションの項目サイズを 1 KB で除算し、次に最も近い整数に切り上げます。

  • 512 バイト / 1 KB = 0.5 (1 書き込みキャパシティーユニット)

このシナリオでは、テーブルのプロビジョニングされた書き込みスループットを 100 書き込みキャパシティーユニットに設定する必要があります。

  • 1 書き込みキャパシティーユニット/項目 × 100 書き込み/秒 = 100 書き込みキャパシティーユニット

詳細については、「項目サイズおよびキャパシティーユニットの消費」を参照してください。

リザーブドキャパシティ

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

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

注記

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