share facebook facebook twitter menu hatena pocket slack

2011.07.22 FRI

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

鈴木 宏康

WRITTEN BY 鈴木 宏康

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

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

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

鈴木 宏康

鈴木 宏康

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