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

DynamoDB での制限

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

読み取り/書き込みモードとスループット

24 時間ごとに 1 回、読み込み/書き込みキャパシティーモードを切り替えることができます。

キャパシティーユニットサイズ (プロビジョニングされるテーブルの場合)

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

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

トランザクション読み込みリクエストでは、4 KB までの項目を 1 秒あたりに 1 回読み込むのに読み込みキャパシティーユニットが 2 個必要です。

トランザクション書き込みリクエストでは、1 KB までの項目を 1 秒あたり 1 回書き込むのに書き込みキャパシティーユニットが 2 個必要です。

リクエストユニットサイズ (オンデマンドテーブルの場合)

最大サイズ 4 KB の項目について、1 つの読み込みリクエストユニット = 1 回の強力な整合性のある読み込み、あるいは 2 回の結果整合性のある読み込み。

最大サイズ 1 KB の項目について、1 つの書き込みリクエストユニット = 1 回の書き込み。

トランザクション読み込みリクエストでは、4 KB までの項目を 1 回読み込むのに読み込みリクエストユニットが 2 個必要です。

トランザクション書き込みリクエストでは、1 KB までの項目を 1 回書き込むのに書き込みリクエストユニットが 2 個必要です。

スループットのデフォルトの制限

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

  • 米国東部(バージニア北部), 米国東部 (オハイオ), 米国西部 (北カリフォルニア), 米国西部 (オレゴン), 南米 (サンパウロ), 欧州 (フランクフルト), 欧州 (アイルランド), アジアパシフィック (東京), アジアパシフィック (ソウル), アジアパシフィック (シンガポール), アジアパシフィック (シドニー), 中国 (北京) リージョン:

    オンデマンド プロビジョンド

    Per table

    40,000 read request units and 40,000 write request units

    40,000 read capacity units and 40,000 write capacity units

    Per account

    Not applicable

    80,000 read capacity units and 80,000 write capacity units

    Minimum throughput for any table or global secondary index

    Not applicable

    1 read capacity unit and 1 write capacity unit

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

    オンデマンド プロビジョンド

    Per table

    10,000 read request units and 10,000 write request units

    10,000 read capacity units and 10,000 write capacity units

    Per account

    Not applicable

    20,000 read capacity units and 20,000 write capacity units

    Minimum throughput for any table or global secondary index

    Not applicable

    1 read capacity unit and 1 write capacity unit

    注記

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

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

AWS マネジメントコンソール では、AWS CloudWatch を使用して [メトリクス] タブで read capacity および write capacity graphs を調べることにより、特定のリージョンにおける現在の読み取りおよび書き込みスループットを確認できます。制限に近づきすぎていないことを確認してください。

プロビジョニングされたスループットのデフォルトの制限を増加させた場合は、DescribeLimits オペレーションを使用して現在の制限値を確認できます。

スループットの増加または減少 (プロビジョニングされたテーブルの場合)

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

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

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

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

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

重要

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

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

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

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

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

テーブル

テーブルのサイズ

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

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

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

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

セカンダリインデックス

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

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

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

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

CreateTable オペレーションでは、ProjectionType として INCLUDE を指定した場合には、すべての セカンダリインデックス で集計した NonKeyAttributes で指定した属性の合計値が 100 を超えてはいけません。同じ属性名を 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 トランザクション API には以下の制約があります。

  • トランザクションには、10 個を超える一意のアクションを含めることはできません。

  • トランザクション内の 2 つのアクションを、同じテーブルの同じ項目に対して実行することはできません。たとえば、ConditionCheckUpdate の両方を 1 つのトランザクションで同じ項目に対して実行することはできません。

  • トランザクションは、複数の AWS アカウントまたはリージョンのテーブルで動作できません。

  • 現在、グローバルテーブルではトランザクションを使用できません。グローバルテーブルでトランザクションを使用する場合は、アカウント担当者または Amazon サポートにお問い合わせください。

DynamoDB ストリーム

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

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

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

AWS では、ストリームが有効な DynamoDB テーブルの書き込み容量について、いくつかのデフォルトの制限があります。制限の拡大をリクエストしない限り、以下の制限が適用されます。サービスの制限の拡大をリクエストするには、https://aws.amazon.com/support を参照してください。

  • 米国東部(バージニア北部), 米国東部 (オハイオ), 米国西部 (北カリフォルニア), 米国西部 (オレゴン), 南米 (サンパウロ), 欧州 (フランクフルト), 欧州 (アイルランド), アジアパシフィック (東京), アジアパシフィック (ソウル), アジアパシフィック (シンガポール), アジアパシフィック (シドニー), 中国 (北京) リージョン:

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

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

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

注記

プロビジョニングされたスループットの制限は、ストリームが有効な DynamoDB テーブルにも適用されます。詳細については、「スループットのデフォルトの制限」を参照してください。

DynamoDB Accelerator (DAX)

AWS リージョンの提供状況

DAX を使用できるリージョンのリストについては、AWS General Referenceの「DynamoDB Accelerator (DAX)」を参照してください。

ノード

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 を使用して、結果をさらに取り出すこともできます。