LoginSignup
44
34

More than 5 years have passed since last update.

DynamoDBのQueryおよびScanの消費読み込みキャパシティについて

Last updated at Posted at 2015-11-21

DynamoDBのGetやPutなどの通常操作であれば1レコード1ユニット単位での計算となるが、
QueryやScanの場合はどうなってたっけ?という疑問が湧いてきたので調べてみた。

前提:ユニットという単位について

DynamoDBでは ユニット という単位でスループットを計算する。
ドキュメントによると以下のような仕様になる。

キャパシティーユニットの用途 計算方法
読み込み 1 秒あたりの項目読み込み数 × 4 KB の項目サイズ(結果整合性のある読み込みを使用する場合は、1 秒あたりの読み込み数が倍になります)
書き込み 1 秒あたりの項目書き込み数 × 1 KB の項目サイズ

例えば

  • 1レコードが 3.5KB であれば 読み込みユニット数は 1レコード=1ユニット
  • 1レコードが 3.5KB であれば 書き込みユニット数は 1レコード=4ユニット

という計算になる。
上記の例であれば、秒間100読み込みを保証したいのであれば100キャパシティを、
秒間100書き込みを保証したいのであれば400キャパシティを予約しておけば良い。


Query および Scan の消費読み込みキャパシティについて

結論から言うと、通常のGetと計算方法が 異なる
例えば以下のレコードを抽出しようとした時には以下の計算方法になる。

シナリオ

項目
秒間あたりの取得レコード数 100
1レコード辺りのサイズ 512byte

操作毎の計算方法

操作 必要とする秒間あたりのスループット
Get or BatchGetItem 1ユニット x 100 = 100キャパシティ
Query or Scan (512 x 100) / 4KB = 12.5キャパシティ

通常の操作では 「レコードベースの計算」に、
QueryおよびScanでは「サイズベースの計算」となる。

Ref

44
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
34