share facebook facebook twitter menu hatena pocket slack

2012.02.15 WED

SimpleDBのドメイン内のデータを一覧表示(NextTokenに注意)

鈴木 宏康

WRITTEN BY 鈴木 宏康

SimpleDBはRDBのSELECTのようなクエリーを発行することができるので、条件に該当するデータを取得することができます。

しかしながら、一回のAPIリクエストで取得できるデータ数は100件までとなっており、それ以降のデータを取得するには、「NextToken」というものを利用して、再度同様のクエリーをAPIでリクエストする必要があります。

具体例としては、100件以上該当データがある場合、レスポンスにNextTokenが含まれ、そのNextTokenを指定して、再度同様のクエリーをリクエストする形になります。
当然、次の100件でもデータが取得しきれない場合は、レスポンスに同様のNextTokenが含まれるので、それを指定して再度リクエストすることになります。

上記を考慮すると、すべてのデータを取得するには、NextTokenがあるかぎり、複数のリクエストを行う必要があります。

ということで、PHPで簡単に作ってみました。

require_once(AWS_SDK_PATH . "/sdk.class.php");
date_default_timezone_set("Asia/Tokyo");

$sdb = new AmazonSDB(
    array("key" => SDB_KEY_ACCESS, "secret" => SDB_KEY_SECRET)
);
$sdb->set_region(AmazonSDB::REGION_APAC_NE1);

$query = "SELECT * FROM log WHERE uid >= '0' ORDER BY uid DESC";
$option = array();
do {
    $response = $sdb->select($query, $option);
    foreach($response->body->SelectResult->Item as $item) {
        print($item->Name . "t");
        foreach($item->Attribute as $attribute) {
            print($attribute->Name  . ":");
            print($attribute->Value . "t");
        }
        print("n");
    }
    if(isset($response->body->SelectResult->NextToken)) {
        $option["NextToken"] = $response->body->SelectResult->NextToken;
    } else {
        $option["NextToken"] = null;
    }
} while($option["NextToken"] != null);

exit(0);
?>

実行結果は、下記のようになります。

# php list-data.php
4f3b67cf5396d8.04566676 uid:1 timestamp:1329293263 action:1
4f3b65774e50c6.59284865 uid:1 timestamp:1329292663 action:1
4f3b64ab8239a8.32909808 uid:1 timestamp:1329292459 action:1
4f3b649b3a3cd1.62613728 uid:1 timestamp:1329292443 action:1
4f3b625e9e17f1.40124430 uid:1 timestamp:1329291870 action:1
4f3b58032f0737.20329909 uid:1 timestamp:1329289219 action:1
...

こちらを応用すれば、SipmleDBのバックアップも簡単に作れるかもしれません。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。