views4GCPのストレージサービスについてまとめてみた。toよりWhyが気になるエンジニアTweetShareHatena注意この記事は2014年7月31日に更新されたもので、内容が古い可能性がありますのでご注意ください。それはなぜかと聞かれても、うまく答えられる方は少ないのではないでしょうか?弊社ではGAEとともに、この3,4年ずっとDatastoreを活用したシステム開発に注力し、ノウハウを積み重ねてきました。今回はそのDatastoreの仕組みについて少しお話しします。ACIDのConsistency(一貫性)に注視して説明します。この記事は、Googleのこちらのページとこちらの論文(pdf)を参考にして書かれています。よかったらこの記事と読み比べてみて下さい。一貫性って?トランザクション処理を行う上で、データの一貫性を保つことは絶対必要です。ある一貫性の例で、「残高は減っているのに相手に送金できてない!」などはあってはいけないですよね。このように重要な一貫性ですが、その強さには程度があり、一般的に以下の2つの定義があります。Consistency更新直後から必ず最新の情報を取ってこれる。逆を言えば、最新の情報が反映されるまでは情報を取れない。Consistency更新後十分な時間が経過しないと最新の情報を取れない。古い情報かもしれないが、いつでも情報を取れる。注意して頂きたいのは、どちらも一貫性は常に保たれます(データの辻褄は必ず合っています)。更新情報がいつ反映されるのかが異なります。Eventualがいいの?一概に言えません。場合は以下のような切り分けが出来ます。Consistency情報が最新かどうかが、ユーザに多大な影響を与えるような処理の場合。具体例としては、「支払が完了したかどうか」や「オンラインゲームで対戦相手のポイントがいくつか」など。Consistency大量のデータで大雑把な処理をするとき。具体例としては、「どの友人が現在オンラインかどうか」や「何人この記事に+1してくれたか」など。どちらが優れているというものではなく、設計の段階で一貫性をどの程度に強めるかを考えることが重要です。Datastoreでは両方を使い分けられる!ここでDatastoreの登場です。Datastoreでは、StrongとEventualの両方の一貫性を扱えるようになってます。開発者が最適なバランスを見つけて設計・開発することができます。どのようにして使い分けできるかというと、取得APIによって一貫性の強さを変えられます。–それぞれのAPIについての詳細や使い方については、また別の機会とします。ここからは、Datastoreがどのようにしてこの機構を実現しているのか、Datastoreの内部について説明していきたいと思います。Datastoreの仕組みもともとDatastoreは、RDBMSとNoSQLのいいとこ取りをしたかったという点があります。RDBMSの利便性(conveniency)一貫性(consistency)可用性(availability)と、NoSQLのスケーラビリティレイテンシーといった両方の特性を実現させるということです。Groupというまとまりを利用しました。Groupの中ではRDBMSの考えを用いる、というものです。Consistencyにデータが反映されます。Consistencyを保ちたいデータはこの中に保存します。indexに保存します。仕組みについてConsistency(一貫性)に着目して説明しました。Consistencyの両方の恩恵を得られる仕組みになっており、開発者はそのバランスを選択できます。Groupを使うか使わないかで、StrongとEventualな一貫性を使い分けることが出来ます。ついて、具体的にコードを使った説明をしたいと思います。Groupの規模や更新頻度によって、レイテンシーがどう変化していくかについても検証して行きたいと思っています。