Amazon SimpleDB 一貫性保証の新オプション登場

2010/02/24 に Amazon SimpleDB の機能拡張が発表されました。

Amazon SimpleDB – the highly available, scalable, and flexible non-relational data store – now enables Consistent Reads and Conditional Puts & Deletes. Consistent Reads provide the ability to specify the consistency characteristic you require for each read call within your application, with an eventually consistent read optimized for lowest latency and highest throughput and a consistent read that provides “read my last write” capability. Conditional Puts & Deletes are mechanisms for inserting, updating, or deleting one or more attributes of an item with full transactional semantics using a single PutAttributes or Delete Attributes API call.

Previously, Amazon SimpleDB provided only eventually consistent reads. By offering a new Consistent Reads option and transactional semantics, AWS aims to facilitate development of additional classes of applications with Amazon SimpleDB. Visit the Amazon SimpleDB page to learn more.

特に前半にかかれている Consistent Reads はできるかできないかで大きくアプリケーションの実装が異なります。SimpleDB を利用したアプリケーション実装において、ロクにドキュメントも読まずに使用してどっぷりハマった部分でもあります。

Eventual Consistent Read が SimpleDB の標準動作(今まではこれのみ)で、更新した情報がいつかは必ず反映されます。この「いつか」というのがポイントです。

つまりリレーショナル・データベースでいうところの INSERT/UPDATE/DELETE を実行(コミット)して、その後 SELECT をしてもその結果が反映されているかどうかは保証されません。でも「いつか」は正しい情報になることは保証しています。

今回、実装された Consistent Read は、それを保証することになります。

ただし、Consistent Read のパフォーマンスは Eventual に劣ります。

後半の Conditional Puts & Deletes は、UPDATE/DELETE する値が特定の値の時のみにその更新を実行する機能です。

これ以降の記事は自信がない。。。参考サイトをご覧ください。

例えばWebサイトにあるカウンターを実装するために利用すると、、、

RDB 的には、UPDATE page_view SET count = count + 1 で良いのですが、SimpleDB ではそうはいきません。現在のカウントを取得し、プラス1した新たな値で書き換えなければいけません。当然、アトミック性が保証されないため正しいカウントがされないでしょう。そこで、 Conditional Put の出番となります。

保存されていた数は100。更新すべき値は101。ここで、更新をするときに「もしも保存されている数が100ならば更新する」という条件をつけて更新することができるわけです。

保存されている数を調べるときは、必ずしも Consistent Read を使う必要はなく、不整合が発生すればシステム側で失敗して更新がされません。短時間に何回も更新しないといけないなら、再読み込み&最更新の仕組みを準備しておくべきでしょう。

また、Consistent Read と組み合わせることで、その時点から操作完了までデータがほかのプロセスによって変更が加えられないこと保証することになります。

参考:

タイトルとURLをコピーしました