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

DynamoDB での制限

このセクションでは、Amazon DynamoDB 内の現在の制限について説明します (制限がない場合もあります)。以下に示す各制限は、指定がない限り、リージョン単位で適用されます。

キャパシティーユニットとプロビジョニングされるスループット

キャパシティーユニットサイズ

最大サイズ 4 KB の項目について、1 つの読み込みキャパシティーユニット = 1 秒あたり 1 回の強力な整合性のある読み込み、あるいは 1 秒あたり 2 回の結果整合性のある読み込み。

最大サイズ 1 KB の項目について、1 つの書き込みキャパシティーユニット = 1 秒あたり 1 回の書き込み

プロビジョニングされたスループットのデフォルトの制限

テーブルまたはグローバルセカンダリインデックスについて、プロビジョニングされるスループットの最小設定は 1 つの読み込みキャパシティーユニットと 1 つの書き込みキャパシティーユニットです。

AWS アカウントでは、プロビジョニングできるスループットについて、いくつかのデフォルトの制限があります。制限の拡大をリクエストしない限り、以下の制限が適用されます。サービスの制限の拡大をリクエストするには、「https://aws.amazon.com/support」を参照してください。

  • 米国東部(バージニア北部) リージョン:

    • テーブル単位 – 読み込みキャパシティーユニット数 40,000 および書き込みキャパシティーユニット数 40,000

    • アカウント単位 – 読み込みキャパシティーユニット数 80,000 および書き込みキャパシティーユニット数 80,000

  • その他すべてのリージョン:

    • テーブル単位 – 読み込みキャパシティーユニット数 10,000 および書き込みキャパシティーユニット数 10,000

    • アカウント単位 – 読み込みキャパシティーユニット数 20,000 および書き込みキャパシティーユニット数 20,000

    注記

    アカウントで使用可能なスループットをすべて 1 つのテーブルに適用することも、複数のテーブルに分けて適用することもできます。

プロビジョニングされたスループット制限には、すべてのグローバルセカンダリインデックスの容量とともに、テーブルの容量の合計が含まれます。

AWS マネジメントコンソールでは、特定のリージョンでプロビジョニングされた現在の容量を表示し、制限に近づきすぎていないことを確認できます。デフォルトの制限を増加させた場合は、DescribeLimits オペレーションを使用して現在の制限値を確認できます。

プロビジョニングされるスループットを増やす

AWS マネジメントコンソール または UpdateTable オペレーションを使用して、必要な回数だけ ReadCapacityUnits または WriteCapacityUnits を増やすことができます。1 回の呼び出しで、テーブル、そのテーブルの任意の グローバルセカンダリインデックス、またはこれらの任意の組み合わせに対して、プロビジョニングされるスループットを増やすことができます。新しい設定は、UpdateTable オペレーションが完了するまでは有効になりません。

プロビジョニングされた容量を追加する場合、アカウントごとの制限を超えることはできません。また、DynamoDB では、プロビジョニングされた容量を急速に増やすことはできません。これらの制限とは別に、テーブルにプロビジョニングされた容量はどれだけでも増やすことができます。アカウントごとの制限の詳細については、前述の「プロビジョニングされたスループットのデフォルトの制限」セクションを参照してください。

プロビジョニングされるスループットを減らす

UpdateTable オペレーションのすべてのテーブルと グローバルセカンダリインデックス では、ReadCapacityUnits または WriteCapacityUnits (あるいはその両方) を減らすことができます。新しい設定は、UpdateTable オペレーションが完了するまでは有効になりません。縮小は、1 日に 4 回までいつでも行うことができます。日付は GMT(グリニッジ標準時)に基づいて定義されます。さらに、過去 4 時間に削減が行われていない場合は追加の削減が可能になるため、一日の削減の最大数は 9 回になります (最初の 4 時間で 4 回、一日の残り時間で 4 時間ごとに 1 回)。

重要

テーブルと GSI の縮小制限は別々に設定されているため、特定のテーブルの GSI にはいずれも、独自の縮小制限が設定されています。ただし、1 つのリクエストでテーブルと GSI のスループットを縮小し、いずれかが現在の制限を超えた場合は拒否されます。リクエストが部分的に処理されることはありません。

GSI が設定されているテーブルの場合は、1 日の最初の 4 時間で次のように変更できます。

  • テーブルの WriteCapacityUnits か ReadCapacityUnits (または両方) を 4 回縮小します。

  • GSI の WriteCapacityUnits か ReadCapacityUnits (または両方) を 4 回縮小します。

同じ日の終わりに、テーブルと GSI のスループットは、合計 9 回ずつ縮小することができる可能性があります。

テーブル

テーブルのサイズ

テーブルのサイズには実用的な制限はありません。テーブルは項目数やバイト数について制限がありません。

アカウントあたりのテーブル数

AWS アカウントについては、リージョンごとに 256 個のテーブルという初期制限があります。

サービスの制限の拡大をリクエストするには、「https://aws.amazon.com/support」を参照してください。

セカンダリインデックス

テーブルごとのセカンダリインデックス

1 つのテーブルで、最大 5 のlocal secondary indexと 5 のグローバルセカンダリインデックスを定義できます。

テーブルあたりの射影されたセカンダリインデックス属性

1 つのテーブルのすべてのローカルおよびグローバル セカンダリインデックス に対して、合計で最大 20 個の属性を射影することができます。これは、ユーザー指定の射影された属性だけに適用されます。

CreateTable オペレーションでは、ProjectionType として INCLUDE を指定した場合には、NonKeyAttributes で指定した属性の数をすべての セカンダリインデックス で集計した合計値が 20 を超えてはいけません。同じ属性名を 2 つの異なるインデックスに射影した場合には、合計を計算する際に 2 つの異なる属性として計算されます。

この制限は、ProjectionTypeKEYS_ONLY または ALL である セカンダリインデックス には適用されません。

パーティションキーおよびソートキー

パーティションキーの長さ

パーティションキーと値の最小長は 1 バイトです。最大長は 2048 バイト です。

パーティションキーの値

テーブルまたはセカンダリインデックスについて、パーティションキー値の明確な数に関する実質的な制限はありません。

ソートキーの長さ

ソートキーと値の最小長は 1 バイトです。最大長は 1024 バイト です。

ソートキー値

一般的に、パーティションキーの値ごとのソートキーの値の数について、実質的に制限はありません。

テーブルの例外はlocal secondary indexです。local secondary indexでは、項目コレクションのサイズに制限があります。異なるパーティションキーの値について、すべてのテーブルおよびインデックス項目の合計サイズは、10 GB を超えることはできません。これにより、パーティションキー値あたりのソートキーの数が制約を受ける可能性があります。詳細については、「項目コレクションのサイズ制限」を参照してください。

名前付けルール

テーブル名およびセカンダリインデックス名

テーブルとセカンダリインデックスの名前は、3 文字以上、255 文字以下である必要があります。使用できる文字は次のとおりです。

  • A-Z

  • a-z

  • 0-9

  • _ (下線)

  • - (ハイフン)

  • . (ドット)

属性名

一般的に、属性名は 1 文字以上、64 KB 以下である必要があります。

例外は次のとおりです。これらの属性名は 255 文字以下である必要があります。

  • Secondary indexパーティションキー名。

  • Secondary indexソートキー名。

  • ユーザー指定の射影された属性の名前(local secondary index のみに適用)。CreateTable オペレーションでは、ProjectionTypeINCLUDE に指定した場合には、NonKeyAttributes パラメータの属性名の長さが制限されます。射影タイプ KEYS_ONLY および ALL には影響しません。

これらの属性名は UTF-8 を使用してエンコードする必要があり、それぞれの名前の合計サイズが (エンコード後に) 255 バイトを超えることはできません。

データ型

文字列

文字列の長さは、最大項目サイズ 400 KB によって制限されます。

文字列は、UTF-8 バイナリエンコードの Unicode です。UTF-8 は可変幅のエンコードであるため、DynamoDB により、UTF-8 バイトを使用して文字列の長さが決まります。

数値

数値は、最大 38 桁の精度であり、正、負、または 0 のいずれかです。

  • 正の範囲: 1E-1309.9999999999999999999999999999999999999E+125

  • 負の範囲: -9.9999999999999999999999999999999999999E+125-1E-130

DynamoDB は JSON 文字列を使用してリクエストと返信の数値データを表します。詳細については、「DynamoDB 低レベル API」を参照してください。

数値の精度が重要な場合は、数値型から変換する文字列を使用して、DynamoDB に数値を渡します。

バイナリ

バイナリの長さは、最大項目サイズ 400 KB によって制限されます。

バイナリ属性を操作するアプリケーションは、データを DynamoDB に送信する前に、それを Base64 形式でエンコードする必要があります。DynamoDB は、受信したデータを署名なしバイト配列にデコードし、それを属性の長さとして使用します。

アイテム

項目のサイズ

DynamoDB の最大項目のサイズ 400 KB で、属性名バイナリの長さ (UTF-8 長) と属性値の長さ (これもバイナリ長) を含みます。属性名はサイズ制限に反映されます。

たとえば、2 つの属性を持つ項目があり、1 つの属性は名前が "shirt-color" で値が "R"、別の属性は名前が "shirt-size" で値が "M" であるとします。この項目の合計サイズは 23 バイトです。

ローカルセカンダリインデックスを持つテーブルの項目サイズ

テーブルの local secondary index ごとに、以下を合計したサイズに関して 400 KB の制限があります。

  • テーブルの項目データのサイズ。

  • その項目に対応する local secondary index エントリのサイズ。キーの値と射影された属性を含みます。

属性

項目あたりの属性名と値のペア

項目あたりの属性の累積サイズは、DynamoDB の最大項目サイズ (400 KB) 内である必要があります。

リスト、マップ、またはセットの値の最大数

値を含む項目が 400 KB のサイズ制限内である限り、リスト、マップ、またはセットの値の最大数の制限はありません。

属性値

属性値は空の文字列または空のセット (文字列セット、数値セット、またはバイナリセット) にすることはできません。ただし、空のリストおよびマップは許可されます。

入れ子の属性の深さ

DynamoDB は深さが最大 32 レベルの入れ子の属性をサポートします。

式パラメーター

式パラメーターには、ProjectionExpressionConditionExpressionUpdateExpression、および FilterExpression があります。

長さ

任意の式の最大長は 4 KB です。たとえば、ConditionExpression a=b のサイズは 3 バイトです。

1 つの式属性名または式属性値の最大長は 255 バイトです。たとえば、#name は 5 バイト、:val は 4 バイトです。

式のすべての置換変数の最大長は 2 MBです。これはすべての ExpressionAttributeNames および ExpressionAttributeValues の長さの合計です。

演算子およびオペランド

UpdateExpression で許容される演算子または関数の最大数は 300 です。たとえば、UpdateExpression SET a = :val1 + :val2 + :val3 は 2 つの "+" 演算子を含みます。

IN コンパレータのオペランドの最大数は 100 です。

予約語

DynamoDB に、予約語と競合する名前の使用を防止する機構はありません (詳細な一覧については、「DynamoDB の予約語」を参照してください)。

ただし、式パラメーターで予約語を使用する場合は、ExpressionAttributeNames も指定する必要があります。詳細については、「式の属性名」を参照してください。

DynamoDB ストリーム

DynamoDB ストリーム のシャードの同時リーダー

同じ DynamoDB ストリーム シャードから同時に複数のプロセスの読み取りを許可しないでください。この制限を超えると、リクエストのスロットリングが発生する場合があります。

ストリームが有効なテーブルの最大書き込みキャパシティー

次の書き込みキャパシティーの制限が、DynamoDB ストリームを有効にしたテーブルに適用されます。

  • 米国東部 (バージニア北部) リージョン:

    • テーブル単位 – 40,000 書き込みキャパシティーユニット

    • アカウント単位– 80,000 書き込みキャパシティーユニット

  • その他すべてのリージョン:

    • テーブル単位 – 10,000 書き込みキャパシティーユニット

    • アカウント単位– 20,000 書き込みキャパシティーユニット

DynamoDB ストリームがあるテーブルの書き込みキャパシティーの増加が必要な場合は、https://aws.amazon.com/support を参照して、サービス制限の引き上げのケースを開いてください。「テーブル書き込み容量ユニット」で制限の増加を指定します。

DynamoDB Accelerator (DAX)

AWS リージョンの提供状況

DAX は以下の AWS リージョンで利用できます。

  • 米国東部(バージニア北部)

  • 米国西部 (北カリフォルニア)

  • 米国西部 (オレゴン)

  • 欧州 (アイルランド)

  • アジアパシフィック (東京)

ノード

DAX クラスターは、1 つのみのプライマリノードと、0 ~ 9 個のリードレプリカノードで構成されます。

ノードの総数 (AWS アカウントごと) は、1 つの AWS リージョン内で 50 を超えることはできません。

パラメータグループ

リージョンごとに最大 20 の DAX パラメータグループを作成できます。

サブネットグループ

リージョンごとに最大 50 の DAX サブネットグループを作成できます。

サブネットグループ内では、最大 20 のサブネットを定義できます。

API 固有の制限

CreateTable/UpdateTable/DeleteTable

一般的に、最大 10 の CreateTableUpdateTable、および、 DeleteTable リクエストを同時に実行できます (任意の組み合わせ)。つまり、CREATINGUPDATING、または DELETING の状態のテーブルの合計数が 10 を超えることはできません。

唯一の例外は、1 つ以上の セカンダリインデックス を持つテーブルを作成する場合です。そのようなリクエストは一度に 5 件まで実行できます。ただしテーブルまたはインデックスの仕様が複雑な場合は、DynamoDB によって同時リクエスト数が一時的に 5 件未満に減らされることがあります。

BatchGetItem

1 回の BatchGetItem オペレーションで、最大 100 項目を取得できます。取得するすべての項目の合計サイズは 16 MB を超えることはできません。

BatchWriteItem

単一の BatchWriteItem オペレーションは、最大 25 の PutItem または DeleteItem リクエストを含むことができます。書き込むすべての項目の合計サイズは 16 MB を超えることはできません。

DescribeLimits

DescribeLimits は定期的に呼び出すのみにする必要があります。1 分以内に複数回呼び出すと、スロットリングエラーが発生する可能性があります。

Query

Query の結果セットは、呼び出しあたり 1 MB に制限されます。クエリ応答から LastEvaluatedKey を使用して、結果をさらに取り出すこともできます。

Scan

Scan の結果セットは、呼び出しあたり 1 MB に制限されます。スキャン応答から LastEvaluatedKey を使用して、結果をさらに取り出すこともできます。