2011年7月20日水曜日

SimpleDBのConsistentReadオプションを試してみた

スズキです。

SimpleDBでデータを取得するとき、デフォルトでは"Eventually Consistent"と呼ばれ、
常に最新のデータが取得できるわけではありません。

必ず最新のデータを取得したい場合は、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 < 10; $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

書き込んだ値と読み取った値が同じになっていることがわかります。

"Conditional put and delete"っていうのも確認しておこう。
--------
http://www.suz-lab.com

0 コメント: