M/Sからの移行:HRD利用時のEventual(結果整合性)について

280 views
Skip to first unread message

asami

unread,
Sep 28, 2011, 4:51:28 AM9/28/11
to Google-App-Engine-Japan
お世話になります。
Asamiです。

今までDataStoreのM/Sを使っていたのですが、
そろそろHRDに移行をしたいと考えています。

そこで気になっているのが、HRDのクエリー利用時のEventualな部分です。

今までM/Sの一貫性を当てにしたアプリ設計になっていたので、
HRDのEventualな部分にかなりビビっています。

http://code.google.com/intl/ja/appengine/docs/python/datastore/hr/
http://www.publickey1.jp/blog/10/google_app_engine_2.html

上記のサイトを参考に以下のように理解しているのですが、
この認識で合っていますでしょうか?

==============
1.取得したエンティティーの内部に、
 直近の更新が反映されていない可能性がある。
 (Dataの実態が最新でない物が使われるイメージ)

2.Indexを使ったクエリーで、
 直近に追加されたデータが取得出来無い場合がある。
 (Indexが最新でない物が使われるイメージ)
==============


前者(Dataの実態が最新じゃない可能性がある)についてはまずそうだろうと思うのですが、

後者(Indexが最新でない物が使われる可能性)については自分の理解に自信が持てません。

もしかしてIndexだけは毎回最新の物を使っていて、
「KeyFetchしてからget_by_keyすれば最新のデータが確実に取れる!」なんていう淡い期待を抱いていたりします。


それとも、そもそもどちらの解釈も間違っていたり。。



お詳しい方、ぜひHRDの一貫性について教えていただけないでしょうか。
せめてヒントだけでもいただければ自分で頑張ってみます><

よろしくお願いいたしますm(_ _)m

akira kusumoto

unread,
Sep 28, 2011, 6:02:23 AM9/28/11
to google-app-...@googlegroups.com
楠元です

> http://code.google.com/intl/ja/appengine/docs/python/datastore/hr/


上記URLに記載してある通り、getはStrongでM/Sと同じ。QueryはEventualです。

1.はgetであれば必ず最新が取得できます。Queryは最新ではない事があります。

2.はその通りです。

Queryで最新が取得できないのはQueryで必要なIndexが更新できていない事があるためです。

getはkeyで直接entityを取得する
ためIndexを使いません。(Indexは複数あり実際には使うけど..
.)

> --
> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
> このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、google-app-engine...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/google-app-engine-japan?hl=ja からこのグループにアクセスしてください。
>

asami

unread,
Sep 28, 2011, 6:40:00 AM9/28/11
to Google-App-Engine-Japan
楠元さま


分かりやすい説明ありがとうございます。

やはりIndexも最新の物では無いのですね。

うぅ。残念ですorz


最新のデータでなくても破綻しないように、
設計を根本から考えなおしたいと思います。
Reply all
Reply to author
Forward
0 new messages