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のバックアップも簡単に作れるかもしれません。