【PHP】DynamoDBのScanのデフォルトが全件スキャンでない

AWS, DynamoDB, PHP

はじめに

岡崎です。
今回は、DynamoDBのscanについて書いていきます。

使用する言語

  • PHP 5.6.12

使用するSDK

いきなり結論

  • 上記のPHP SDKを使用してDynamoデータの中身を全てScanして検索結果を取得したい場合は
    下記のようにすればOKです。

なぜこの結論なのか?(概要)

このSDKを使用したDynamoDBのScanは、イメージでいうとページャーです。
ページが複数あるうちの1ページ目の項目しか検索してくれない感じのものなので、
全部の項目を見に行きたい場合は、自分でループを回す必要があります。

なぜこの結論なのか??(詳細)

以下、ページを例に出しながら照らしあわせて解説します。


  • 1ページ目で検索した結果が何もない場合は、Itemsの中が空でレスポンスとして返却されます。

  • 検索結果がある場合は、Itemsの中にDynamoDBからの情報が入ることになります。


  • ページが他にも存在する場合(2ページ目, 3ページ目…)は、レスポンスの中のLastEvaluatedKey
    のValueに以下のような値が入ってきます。

  • 逆に他にもう検索項目が無い場合(全ての項目をscanした場合)は、レスポンスにLastEvaluatedKeyが返却されません。

  • ページが他にも存在する場合で次のページを検索したい場合は、検索条件にExclusiveStartKeyにLastEvaluatedKeyを指定することでoffsetを変更することができます。(前回の検索範囲を除いた部分から検索を開始します。ということを明示的に書くことができます。)

最後に

この内容は、このAmazonの公式にも解説が載っています。

この記事を書いた人

岡崎拓哉
岡崎拓哉
2016年に入社した新卒。ドラムとインコが好き系エンジニア。

AWS, DynamoDB, PHP