Overview
DynamoDB の Scan 操作について AWS のマネジメントコンソールと API 直叩きで返ってくる List が違う、ということがあったので調べてみました。
どう違ったのか?
以下のような事象が起きてました。
- AWS マネジメントコンソール上からあるテーブルに条件 (Filter) を追加して Scan 操作をすると 50 件返ってくる。
- 同じ条件で AWS CLI から Scan 操作をするとデータが返ってこない。
何が起きていたのか
多分 AWS の CLI(要は API 直叩き)の方が一度の Scan 結果としては正しいと思ったので AWS マネジメントコンソールで何が起きてるのか DevTool のネットワークからわかるかなーと思って徐にみてみたところ
マネジメントコンソールで50件表示されていたのは 50 件取れるまで何度も操作をし直していたからでしたw
つまりマネジメントコンソール上では、Scanの操作に対して UI 上は 1 度しか叩いてないように見えても実態は
- 一度APICall投げる(countに達しない)
- もう一回 Call投げる
1->2->1…で count に達するまでやり続ける、ということをしていたようです。node に分散してるデータを片っ端から取りに行って View で表示してくれてるだけでした。
考えてみれば当たり前なんですがw。目的の FIlter したい条件を一発でとってくるには Index 設定する他ないですね。
ぼやき
ここはぼやきですが、ずっと GCP の Datastore/Firestore に慣れ親しんできて DynamoDB を触るようになって半年くらい経ちますが、全然同じ感覚で使えない(運用してみて、どちらかというと RDB 触っていた頃に感覚としては近い?)なぁと最近感じてます。
良し悪しがあるので、どっちがいい、という話ではないですが、Index の考え方だったり、最低限のクエリ叩く方法だったり、GCP の方が直感的な感じはありますね(個人の感覚です)
終わり。