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/ のサポート」を参照してください。

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

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

注記

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

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

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

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

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

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

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

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

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

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

重要

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

1 日の最初の 4 時間で、グローバルセカンダリインデックスが設定されているテーブルは次のように変更できます。

  • テーブルの WriteCapacityUnitsReadCapacityUnits (または両方) を 4 時間減らします。

  • グローバルセカンダリインデックスの WriteCapacityUnitsReadCapacityUnits (または両方) を 4 時間減らします。

同じ日の終わりに、テーブルとグローバルセカンダリインデックスのスループットは、合計 27 回ずつ縮小することができる可能性があります。

テーブル

テーブルのサイズ

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

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

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

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

セカンダリインデックス

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

5 の最大ローカルセカンダリインデックスを定義することができます。

20 のグローバルセカンダリインデックスには、1 テーブルあたり 20 個の初期制限があります。サービスの制限の拡大をリクエストするには、「https://aws.amazon.com/ のサポート」を参照してください。

UpdateTable オペレーションごとに、1 つのグローバルセカンダリインデックスを作成または削除できます。

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

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

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

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

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

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

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

パーティションキーの値

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

ソートキーの長さ

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

ソートキー値

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

セカンダリインデックスを持つテーブルは例外です。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 オペレーションには以下の制約があります。

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

  • トランザクションには、4 MB を超えるデータを含めることはできません。

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

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

  • グローバルテーブルでは、トランザクションがデフォルトで有効になっていません。グローバルテーブルでトランザクションを使用する場合は、アカウント担当者または Amazon サポートにお問い合わせください。

DynamoDB ストリーム

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

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

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

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

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

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

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

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

注記

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

DynamoDB Accelerator (DAX)

AWS リージョンの提供状況

DAX を使用できる AWS リージョンのリストについては、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 の状態のテーブルの合計数が 50 を超えることはできません。

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

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

保管時の DynamoDB の暗号化

AWS 所有のカスタマーマスターキー (CMK) から AWS 管理の CMK に、テーブルの作成時から 24 時間の枠内でいつでも切り替えることができます。また、過去 6 時間以内に変更がなかった場合は、さらに変更することができます。これにより、1 日の変更の最大数は 8 回になります (最初の 6 時間で 4 回、その後 1 日の 6 時間ごとに 1 回の変更)。

AWS 所有 CMK への暗号化キーの切り替えは、必要な回数だけ行うことができます。

制限の拡大をリクエストしない限り、以下の制限が適用されます。サービスの制限の拡大をリクエストするには、「https://aws.amazon.com/ のサポート」を参照してください。