emahiro/b.log

Drastically Repeat Yourself !!!!

DynamoDB の Scan の挙動がわからなかったので調べた話

Overview

DynamoDB の Scan 操作について AWS のマネジメントコンソールと API 直叩きで返ってくる List が違う、ということがあったので調べてみました。

どう違ったのか?

以下のような事象が起きてました。

  • AWS マネジメントコンソール上からあるテーブルに条件 (Filter) を追加して Scan 操作をすると 50 件返ってくる。
  • 同じ条件で AWS CLI から Scan 操作をするとデータが返ってこない。

何が起きていたのか

多分 AWSCLI(要は API 直叩き)の方が一度の Scan 結果としては正しいと思ったので AWS マネジメントコンソールで何が起きてるのか DevTool のネットワークからわかるかなーと思って徐にみてみたところ

f:id:ema_hiro:20210513124746p:plain

マネジメントコンソールで50件表示されていたのは 50 件取れるまで何度も操作をし直していたからでしたw

つまりマネジメントコンソール上では、Scanの操作に対して UI 上は 1 度しか叩いてないように見えても実態は

  1. 一度APICall投げる(countに達しない)
  2. もう一回 Call投げる

1->2->1…で count に達するまでやり続ける、ということをしていたようです。node に分散してるデータを片っ端から取りに行って View で表示してくれてるだけでした。
考えてみれば当たり前なんですがw。目的の FIlter したい条件を一発でとってくるには Index 設定する他ないですね。

ぼやき

ここはぼやきですが、ずっと GCP の Datastore/Firestore に慣れ親しんできて DynamoDB を触るようになって半年くらい経ちますが、全然同じ感覚で使えない(運用してみて、どちらかというと RDB 触っていた頃に感覚としては近い?)なぁと最近感じてます。
良し悪しがあるので、どっちがいい、という話ではないですが、Index の考え方だったり、最低限のクエリ叩く方法だったり、GCP の方が直感的な感じはありますね(個人の感覚です)

終わり。