SimpleDBでデータを取得するとき、Eventually Consistent(結果整合性)と呼ばれる現象が発生するので、デフォルトの場合、常に最新のデータが取得できるわけではありません。
必ず最新のデータを取得したい場合は、ConsistentReadオプションを利用します。
そして実際に、下記のコードでConsistentReadオプションを試してみました。
(ConsistentReadの値は論理値ではなく文字列true/falseなので注意が必要です)
define("AWS_KEY" , "AAAAAAAA"); define("AWS_SECRET_KEY", "SSSSSSSS"); require_once("/opt/aws/php/sdk.class.php"); $sdb = new AmazonSDB(); $sdb->set_region(AmazonSDB::REGION_APAC_NE1); $consistency = "true"; // or false for($i = 0; $i $response = $sdb->put_attributes("log", "key", array( "message" =>$i ), true); $response = $sdb->get_attributes( "log", "key", null, array("ConsistentRead" => $consistency) ); print($i . " " . $response->body->GetAttributesResult->Attribute->Value . "n"); }
まずは、ConsistentReadがfalse、つまりデフォルトの場合になります。
0 0 1 1 2 1 3 2 4 4 5 4 6 5 7 7 8 7 9 8
書き込んだ値と読み取った値が違う場合があることがわかります。
次に、ConsistentReadがtrueの場合です。
0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
書き込んだ値と読み取った値が同じになっていることがわかります。