AWS

【DynamoDB】プロビジョニングモード

テーブルにプロビジョニングモードを設定すると、1秒間あたりのテーブルの読み込み及び書き込み回数に制限を設ける必要があります。

この制限をスループットと言い、プロビジョニングモードの場合、テーブルにスループットを指定する必要があります。
スループットはテーブルが1秒間に許容できるデータの書き込み及び読み込み上限回数のことです。
スループットにはキャパシティユニットの数を指定します。

プロビジョニングモードが適しているケース

プロビジョニングモードが適しているケースは以下の通りです。

・1秒あたりの項目の読み込み及び書き込み回数が予想可能、または明確となっている場合。
・項目の読み込み及び書き込み回数が一定、または徐々に増加する場合。
・1項目あたりの項目のサイズが予想可能、または明確となっている場合。

読み込みキャパシティユニット

項目の読み込みについて、基本的な消費キャパシティユニットの計算は以下の通りです。

・1秒あたり4KBの項目の結果整合性読み込みを2回行うと1キャパシティユニット消費されます。
・1秒あたり4KBの項目の強力な整合性読み込みを1回行うと1キャパシティユニット消費されます。
・1秒あたり4KBの項目のトランザクション読み込みを1回行うと2キャパシティユニット消費されます。

なお、4KB以下の項目の場合も4KBとして計算されます。
また、5KBの項目の場合、8KBとしてサイズを4の倍数で切り上げて計算されます。8KBの場合、消費キャパシティユニットも2倍になります。

各読み込みオペレーションでのキャパシティユニット

テーブルの項目を読み込む方法には、GetItem、BatchGetItem、Query、Scanがあります。
各々について、消費されるキャパシティユニットがどのように計算されるかを説明します。

GetItem

1項目を読み込む為、基本的な考え方の計算となります。

BatchGetItem

複数のテーブルから最大100個の項目を取得できます。処理としては1回ずつGetItemが実行されています。
従って、キャパシティユニットの計算は1回毎のGetItemの項目サイズを使用します。
故に、BatchGetItemで使用される合計項目のサイズは使用されません。
例えば、2項目取得したとして、1項目目は1KB、2項目目は2KBで合計3KBになりますが、計算は各々4KBとなり合計で8KBとなります。

Query

クエリーで取得できる項目の合計サイズを計算として使用します。

Scan

スキャンした項目の合計サイズを計算として使用します。スキャンして得られた結果の合計サイズではありません。

項目が存在しない読み込み

存在しない項目の読み込みを行なった場合もキャパシティユニットは消費されます。
結果整合性のある読み込みでは0.5キャパシティユニット、強力な読み込みでは1キャパシティユニットが消費されます。

項目数を取得した時の消費キャパシティユニット

Query と Scan は、項目数の取得も行えます。消費されるキャパシティユニットは項目を読み込む場合と同じです。

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

項目の書き込みについて、基本的な消費キャパシティユニットの計算は以下の通りです。

・1秒あたり1KBの項目の書き込みを1回行うと1キャパシティユニット消費されます。
・1秒あたり1KBの項目のトランザクション書き込みを1回行うと2キャパシティユニット消費されます。

なお、1KB以下の項目の場合も1KBとして計算されます。
1.1KBの項目場合は2KBとして計算されます。2KBの場合、消費キャパシティユニットも2倍になります。

各書き込みオペレーションでのキャパシティユニット

テーブルの項目を読み込む方法には、PutItem、UpdateItem、DeleteItem、BatchWriteItemがあります。
各々について、消費されるキャパシティユニットがどのように計算されるかを説明します。

PutItem

1項目を追加します。この場合、キャパシティユニットの計算は、書き込みを行う項目のサイズが使用されます。
PutItemはプライマリキーが存在する場合、プライマリキーが一致する項目を更新します。
この場合、更新前後の項目サイズで大きい方が計算に使用されます。

UpdateItem

1項目を更新します。キャパシティユニットの計算は、更新前後の項目サイズで大きい方が計算に使用されます。属性の一部だけ更新されても更新される属性のサイズは計算に使用されません。更新前後の項目のサイズが使用されます。

DeleteItem

削除される項目のサイズがキャパシティユニットの計算に使用されます。

BatchWriteItem

複数のテーブルに最大25個の項目を書き込みます。処理としては1回ずつPutItem または DeleteItemが実行されています。
従って、キャパシティユニットの計算は1回毎のPutItem または DeleteItemの項目サイズを使用します。
故に、PutItem または DeleteItemで使用される合計項目のサイズは計算で使用されません。
例えば、2項目書き込みしたとして、1項目目は0.1KB、2項目目は0.2KBで合計0.3KBになりますが、計算は各々1KBとなり合計で2KBとなります。

条件付き書き込み

PutItem、UpdateItem、DeleteItem では、条件付き書き込みを行えます。
条件に一致せずオペレーションが実行されなかった場合でも、キャパシティユニットは消費されます。
PutItem、UpdateItemの場合、項目を追加または更新します。追加、更新の項目サイズの計算は以下の通りです。

・項目を更新する場合、更新する項目(新しい項目)サイズを計算で使用します。
・項目を追加する場合、追加する項目サイズを計算で使用します。

スループットを超えた場合

例外の受け取り

ProvisionedThroughputExceededException を返します。
開発者はこの例外を受け取って次のアクションを決定できます。

バーストキャパシティ

バーストキャパシティを利用して超過したスループットに対応します。

アダプティブキャパシティ

アダプティブキャパシティを利用して超過したスループットに対応します。

© DeNnie.Lab All Rights Reserved.